类和对象

第二章 类和对象

大憨熊 提交于 2020-03-01 03:17:57
一、类中成员函数和成员变量存储位置 成员变量在堆区或栈区分配内存,成员函数在代码区分配内存。 sizeof(className) == sizeof(成员变量) 二、析构函数的执行时机 在所有函数之外创建的对象是全局对象,它和全局变量类似,位于内存分区中的全局数据区,程序在结束执行时会调用这些对象的析构函数。 在函数内部创建的对象是局部对象,它和局部变量类似,位于栈区,函数执行结束时会调用这些对象的析构函数。 new 创建的对象位于堆区,通过 delete 删除时才会调用析构函数;如果没有 delete,析构函数就不会被执行。 三、本章内容 来源: CSDN 作者: 路哞哞 链接: https://blog.csdn.net/qq_34696503/article/details/104582445

Scala类和对象(二)

旧街凉风 提交于 2020-02-29 22:18:21
1. 类和属性 1.1 如何控制构造函数字段的可见性 在Scala中: 如果一个字段被声明为var, Scala会为该字段生成getter和setter方法。 如果字段是val, Scala只生成getter方法。 如果一个字段没有var或者val的修饰符, Scala比较保守,不会生成getter和setter方法。 另外,var和val字段可以被private关键字修饰,这样可以防止生成getter和setter方法。 我们看一下测试代码: object Demo{ def main(args: Array[String]): Unit = { val p = new Person("haah") println(p.name) } class Person(var name:String){ } } 结果: haah 我们再把name设置为val: 还没有到运行阶段,编译器自动捕获了异常。改为var就可以了。 如果设置为非val和非var的字段: 直接找不到name这个对象,当构造函数参数既没有声明为val或var时,字段的可见性很受限制,井且Scala不会为此生成访问修改方法。 给val或者var加上private,这个关键字会阻止getter和setter方法的生成,所以这种宇段只能被类的成员变量使用。 2. 构造函数 如同在java中可以定义多个构造函数

Python 类和对象,烤地瓜案例

爷,独闯天下 提交于 2020-02-29 17:05:32
#coding= utf-8 class SweetPotato: def __init__(self): self.cookedLevel = 0 self.cookedString = "生的" self.condiments = [] def cook(self,time): self.cookedLevel += time if self.cookedLevel > 8: self.cookedString = "烤焦了" elif self.cookedLevel > 5: self.cookedString = "烤熟了" elif self.cookedLevel > 3: self.cookedString = "半生不熟" else: self.cookedString = "生的" def addCondiments(self,addWhat): self.condiments.append(addWhat) #重点:一定要先判断大于8,再判断是否大于5,再判断大于3,如果不这样的话,反过来,程序会满足多个if def __str__(self): msg = "地瓜的生熟程度为:" + self.cookedString msg += ",等级为" + str(self.cookedLevel) if len(self.condiments)>0: msg +

c++——成员对象和封闭类

荒凉一梦 提交于 2020-02-28 03:42:12
成员对象:一个类的成员变量是另一个类的对象。包含成员对象的类叫做封闭类。 包含成员对象的封闭类的执行顺序是怎么样的呢? 当封闭类对象生成时: • S1: 执行所有成员对象 的构造函数 • S2: 执行 封闭类 的构造函数 成员对象的构造函数调用顺序 • 和成员对象在类中的说明顺序一致 • 与在成员初始化列表中出现的顺序无关 当封闭类的对象消亡时: • S1: 先执行 封闭类 的析构函数 • S2: 执行 成员对象 的析构函数 析构函数顺序和构造函数的调用顺序相反 友元可以分为两类:友元函数与友元类; 友元函数:一个类的友元函数可以访问这个类的私有成员,要在这个类里用friend关键字声明。 友元类:A声明B为它的友元类,则B成员函数可以访问A的私有成员。 友元关系不能继承,不能传递 this指针的作用:指向成员函数所作用的对象。 静态成员的参数就是程序中列出的参数,而类中非静态成员函数的参数有一个this指针。 静态成员函数不能使用this指针 常量对象:常量函数与常引用。 常量对象:在对象前加一个const关键字,可以是对象不被改变,常量对象只能调用常量成员函数。 常量成员函数:在类的成员函数说明后面可以加const关键字,则该成员函数成为常量成员函数,不能修改成员变量,同名的成员函数加const算函数的重载。 对象作为函数的参数时,用常引用,既不会调用复制构造函数

C++学习笔记——类和对象——继承

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-28 03:32:41
继承是面向对象的三大特性之一,下图展示了一些类与类之间的关系。 可以看出来,下层级别的成员除了拥有上一层的共性,还有自己的特性,这个时候就需要考虑用继承的技术以减少重复代码。 继承的语法: class A: 继承方式 B; A类称为子类或者派生类,B类称为父类或者基类,子类中的成员包含两个部分,一部分是从父类继承过来的,另一部分是自己增加的成员,从父类继承过来的表现共性,新增的成员体现个性。 class Animal{ public: void information(){ cout<<"我是一只动物"<<endl; } }; class Dog:public Animal{ public: void dog(){ cout<<"我是一只狗"<<endl; } }; class Hashiqi:public Dog{ public: void hashiqi(){ cout<<"我是一只二哈"<<endl; } }; void test01(){ Hashiqi hashiqi; hashiqi.information(); hashiqi.dog(); hashiqi.hashiqi(); } 继承的方式: 继承方式一共有三种: 公共继承; 保护继承; 私有继承。 继承中的对象模型: 从父类中继承过来的成员,哪些属于子类对象,下面通过一段代码测试一下。 class Base {

第1章 类和对象—面向对象概念

[亡魂溺海] 提交于 2020-02-25 22:12:34
面向对象程序设计( Object-Oriented Programming , OOP )是一种程序设计架构,同时也是一种程序开发的方法。对象指的是类的实例,它将对象作为程序的基本单元,将程序和数据封装其中,以提高代码的重用性、灵活性和扩展性。 1.1 面向对象概念 时间是由什么组成的?现实世界是由一个一个对象组成的,例如看到的东西、听到的事件、想到的事情,这些都是对象,也就是说万事万物皆对象。不同的对象,既相互独立,又相互联系,人们面向的世界是“面向对象”的。 1.1.1 对象抽象成类 对象( Object )抽象为类( Class )的过程,是在系统分析阶段完成的。 1. 分析对象的特征 对象是人们要分析的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件,不同的对象呈现不同的特征 。由于对象反映了现实世界,人们通过面向对象的方法就可以找到合理地解决问题的方法。怎么区分这些对象呢?就是分析与系统相关的特征,包括状态(静态特征)和操作(动态特征)。如图 1-1 所示为对象的部分特征的分析。 状态:用于描述对象的静态特征,表示对象“是什么样子”。对象的状态用一些数据来描述,在程序中称为字段或属性。 操作:用于描述对象的动态特征,表示对象“能做什么”。对象的操作用于改变对象的状态,对象的操作就是对象的行为,在程序称为方法或函数 。 对象实现了状态和操作的结合

类和对象

[亡魂溺海] 提交于 2020-02-25 12:44:04
一 基本概念 1.类、对象、成员变量(属性)、成员函数 2.面向对象三大概念:封装、继承、多态 3.编程实践:类的定义和对象的定义,对象的使用 二 类的封装 (1)封装(Encapsulation) A)封装,是面向对象程序设计最基本的特性。把数据(属性)和函数(操作)合成一个整体,这在计算机世界中是用类与对象实现的。 B)封装,把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。 备注:有2层含义(把属性和方法进行封装 对属性和方法进行访问控制) C++中类的封装 成员变量,C++中用于表示类属性的变量 成员函数,C++中用于表示类行为的函数 (2)类成员的访问控制 在C++中可以给成员变量和成员函数定义访问级别 Public修饰成员变量和成员函数可以在类的内部和类的外部被访问 Private修饰成员变量和成员函数只能在类的内部被访问 //类是把属性和方法封装 同时对信息进行访问控制 //类的内部,类的外部 //我们抽象了一个类,用类去定义对象 //类是一个数据类型,类是抽象的 //对象是一个具体的变量。。占用内存空间。 class Circle { public : double r ; double s ; public : double getR ( ) { a ++ ; return r ; } void setR (

第十章对象和类编程题

时光毁灭记忆、已成空白 提交于 2020-02-24 23:27:35
# include <iostream> # include <string> using namespace std ; class account { private : string name ; string id ; double deposit ; public : account ( ) ; account ( string n , string i , double d ) ; void show ( ) const ; void account_in ( ) ; void acocunt_out ( ) ; } ; int main ( ) { account account1 ( "zhengyuxin" , "041933011" , 100 ) ; account1 . show ( ) ; account1 . account_in ( ) ; account1 . show ( ) ; account1 . acocunt_out ( ) ; account1 . show ( ) ; return 0 ; } account :: account ( ) { name = "none" ; id = "none" ; deposit = 0 ; } account :: account ( string n , string i , double d

Java基础——对象和类

ⅰ亾dé卋堺 提交于 2020-02-24 23:05:25
  将包含main方法的类称为主类。   变量的作用域是指变量可以在程序中引用的范围。   实例变量和静态变量的作用域是整个类,无论变量是在哪里声明的。   局部变量的声明和使用都在一个方法的内部。   一个类的实例变量和静态变量称为类变量或数据域。在方法内部定义的变量成为局部变量。   局部变量的作用域从声明变量的地方开始,直到包含该变量的块结束为止。局部变量都必须在使用之前进行声明和赋值。(Java没有给局部变量赋默认值)   无论在何处声明,类变量的作用域都是整个类。类的变量和方法可以在类中以任意顺序出现。但当一个数据域是基于对另一个数据域的引用来进行初始化时则不是这样。在这种情况下,必须首先声明另一个数据域。   类变量只能声明一次,但是在同一个方法内不同的非嵌套块中,可以多次声明相同的变量名。   可以在一个方法的不同块里声明同名的局部变量,但是,不能在嵌套块中或同一个块中两次声明同一个局部变量。   如果一个局部变量和一个类变量具有相同的名字,那么局部变量优先,而同名的类变量将被隐藏。   可以把两个类放在同一个文件中,但是文件中只能有一个类是公共(public)类。此外,公共类必须与文件同名。源代码中的每个类编译成.class文件。   构造方法在使用new操作符创建对象的时候调用,它是一种特殊的方法,有以下三个特殊性:    (1)构造方法必须具备和所在类相同的名字

第十章 对象和类复习题

梦想与她 提交于 2020-02-24 21:19:50
就是拥有相等功能和相同的属性的对象的集合 2. 类是对象的抽象,通过将属性与方法封装在一个类中,且设置访问权限,对外只提供部分接口来实现封装与隐藏。 3. 类是对象的抽象,而对象是类的具体实例。 4. 函数成员对数据成员进行操作,数据成员就是类对象的属性 5. class account { private : string name ; string id ; double deposit ; public : account ( ) ; account ( string n , string i , double d ) ; void show ( ) const ; void account_in ( ) ; void acocunt_out ( ) ; } ; 在创建类对象或显示调用构造函数时,类的构造函数都将被调用。当对象过期时,类的析构函数将被调用。 8. 默认构造函数是没有参数或所有参数都有默认值的构造函数。拥有默认构造函数后,可以声明对象,而不初始化它,即使已经定义了初始化构造函数。它还使得能够声明数组。 10.this指针是类方法可以使用的指针,它指向用于调用方法的对象。因此,this是对象的地址,*this是对象本身。 来源: CSDN 作者: zl吉姆餐厅 链接: https://blog.csdn.net/qq_32631105/article