1. 构造函数
1.1 简述
1.2 声明
1.3 定义
1.3.1 类内定义
1.3.2 类外定义
1.4 初始化列表
1.5 构造函数的使用
1.6 默认构造函数
2. 析构函数
2.1 简述
2.2 声明
2.3 定义
2.3.1 类内定义
2.3.2 类外定义
2.4 注意
3. 类的常量成员
3.1 常量成员数据
3.2.1 规则
3.2.2 性质
3.2 常量成员函数
3.2.1 规则
3.2.2 性质
3.2.3 使用方法
1.1 简述
xxxxxxxxxx
31构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值.
2
3一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们,即构造函数的重载。
1.2 声明
xxxxxxxxxx
151构造函数名 (参数表) ;
2
31. 构造函数名: 必须与类名相同;
42. 小括号;
53. 参数表: 与函数一样;
64. 分号, 分号, 分号;
7
8注意:
91. 构造函数是没有返回类型的;
102. 构造函数其实有返回值,就是对象;
113. 构造函数名必须与类名相同;
124. 构造函数的作用,默认是用来初始化对象的;
135. 构造函数可以有多个,可以重载;
大专栏 HexoC++第04课 构造析构.mdstyle="left: -36px;">146. 构造函数可以有不同的访问修饰符;
157. 函数声明以分号结束;
1.3 定义
1.3.1 类内定义
xxxxxxxxxx
11构造函数名 (参数表) { /*代码块*/ }
1.3.2 类外定义
xxxxxxxxxx
511. 类内声明:
2构造函数名(参数表);
3
42. 类外定义:
5类名::构造函数名(参数表) { /*代码块*/ }
1.4 初始化列表
xxxxxxxxxx
121初始化列表是用来初始化任意个数成员属性的,位置在定义的构造函数的参数表的小括号之后加冒号,再加成员初始化,成员间用逗号分隔;
2
31. 位置在定义的构造函数的参数表的小括号之后;
42. 冒号;
53. 初始化成员列表,成员间用分号隔开;
64. 花括号;
75. 代码块;
8
9注意:
101. 初始化成员列表可以是部分成员;
112. 引用必须被初始化;
123. 成员的初始化文化是用小括号加上数据;
1.5 构造函数的使用
xxxxxxxxxx
511. 显示调用(基本不使用)
2见Main.cpp的7~12行.
3
42. 隐式调用
5见Main.cpp的14~15行.
1.6 默认构造函数
xxxxxxxxxx
91如果没有写构造函数,编译器也会自动给添加一个默认构造函数.
2
3格式:
4CAnimal() {}
5注意: 只要自己定义了构造函数,编译器就会没有默认构造函数。
6如果还需要默认构造,则需要重新自定义一个默认构造函数
7如果没有定义默认构造函数,会有三个默认构造函数,形如:
8CAnimal::CAnimal();
9CAnimal::CAnimal(const CAnimal&);
2. 析构函数
2.1 简述
析构函数(destructor) 与构造函数相反,当对象结束其生命周期时,系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作,如果对象是在堆中,那么它会释放内存.
2.2 声明
xxxxxxxxxx
11
2.3 定义
2.3.1 类内定义
2.3.2 类外定义
2.4 注意
xxxxxxxxxx
51注意:
2析构函数名也应与类名相同,只是在函数名前面加一个位取反符~,例如~Animal(),以区别于构造函数。
3它不能带任何参数,也没有返回值(包括void类型)。
4只能有一个析构函数,不能重载。
5如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数(即使自定义了析构函数,编译器也总是会为我们合成一个析构函数,并且如果自定义了析构函数,编译器在执行时会先调用自定义的析构函数再调用合成的析构函数),它也不进行任何操作.
3. 类的常量成员
3.1 常量成员数据
3.2.1 规则
xxxxxxxxxx
41如果一个成员数据被关键字const修饰,则该成员数据成为常量成员数据。常量成员数据的定义格式如下:
2const <数据类型> 成员数据名
3或者
4<数据类型> const 成员数据名
3.2.2 性质
xxxxxxxxxx
31①常量成员数据是数据值不能再修改更新的成员数据,一个类所创建的每个对象可以拥有不同的常量成员数据值;
2②在创建一个类的对象时,该类的常量成员数据必须初始化,并且它的值以后不能更改;
3③常量成员数据的初始化只能在该类构造函数头的成员初始化列表中完成,而不能再构造函数体内进行。
3.2 常量成员函数
3.2.1 规则
xxxxxxxxxx
21如果声明类的成员函数时,在末尾加上const修饰,则该成员函数称为类的常量成员函数。常量成员函数的定义如下:
2<返回类型> 成员函数名(参数表) const
3.2.2 性质
xxxxxxxxxx
21①常量成员函数与普通成员函数一样,其由函数头和函数体组成的定义部分既可以写在类体内,也可以写在类体外;
2②定义一个常量成员函数实质上是吧this指针在该成员函数内定义成指向常量的常量指针,由此,常量成员函数体内this指针不能重新定向,它总是指向调用该常量成员函数的对象,而且,该对象的成员数据也不可以被修改。
3.2.3 使用方法
xxxxxxxxxx
51①常量对象只能调用它的常量成员函数,而不能调用普通成员函数;
2②普通对象既可以调用常量成员函数,也可以调用普通成员函数;
3③普通成员函数可以访问本类的常量成员函数;
4④常量成员函数不能访问本类的普通成员函数;
5⑤如果常量成员函数与普通成员函数同名,即构成了重载成员函数,那么,常量对象调用常量成员函数,普通对象调用普通成员函数。