第五章总结
下面是小编为大家整理的第五章总结,供大家参考。
第五章特殊函数和成员 1, 成员初始化 当类中定义了 const 成员, 引用成员时, 构造函数中要为这些成员初始化, 使用初始化列表形式。
如:
下面 test 类中构造函数定义形式。
PI 和 r 是 const 成员和引用成员必须使用初始化列表形式, x,y 是普通成员, 可在函数体内为 x, y 赋值。
注意下面程序中 PI 和 r 的初始化形式。
2, 静态成员 用 static 声明的成员为静态成员,
静态成员必须在类外初始化,
静态成员不依赖于对象而存在, 对象未产生之前, 静态成员已存在 静态成员函数没有 this 指针 可通过类名限定来使用静态成员。
若在类体内用 static 声明了静态成员函数, 在类体外定义静态函数时不需要加 static 关键字。
静态成员函数不能说明为虚函数 静态成员是类的成员不是对象的成员
使用时注意:
类的对象可调用静态成员(数据成员和成员函数)
静态成员函数不能访问非静态成员 静态成员函数可访问静态成员 注意:
静态对象何时构造何时析构
3, 阅读如下程序, 写出运行结果。
注意静态对象 ty 的生存周期:
何时构造何时析构。
4, 友元:
普通函数作友元, 类的成员函数作类的友元, 一个类作另一个类的友元。
用 friend 声明, 友元必须通过类的对象或引用来访问类中的成员。
注意:
在友元函数内如(dist 函数)
必须通过引用来访问对象的成员。
此为类做友元
友元可以访问类的私有成员, 公有成员和保护成员。
友元可以是一个类或函数也可是一个类的成员函数。
友元需通过对象或引用来使用类的成员。
友元关系是单向的, A 是 B 的友元, B 不一定是 A 的友元。
友元关系是不传递的, A 是 B 的友元, B 是 C 的友元, A 不一定是 C 的友元。
5, const 对象, const 数据成员, cosnt 限定的函数参数, const 函数
1)
const 限定的数据成员初始化时必须使用初始化列表形式。
注意:
类的数据成员在不可在定义时为 数据成员初始化。
2)
const 变量定义时必须初始化。
注意 const 变量和 cosnt 数据成员的区别。
3)
const 限定的形式参数在函数体内不可出现改变参数的语句。
4)
const 函数定义形式:
类型
函数名(参数)
const
{
//函数体
}
注意:
const 函数体内不能出现任何试图改变变量值的语句。
5)
const 对象:
cosnt
A
a(参数);
定义类 A 的对象 a 时加 cosnt 限定, 则 a 为 const 对象即常对象。
const 对象定义后对象不可改变。
注意:
cosnt 对象只能调用 const 成员函数, const 对象不能调用非 const 成员函数。
const 成员函数只能调用 const 成员函数, const 成员函数不能调用非 const 成员函数。
非 const 对象可调用 const 成员函数。
Const 函数和普通函数可进行重载, 即可定义一个 f函数, 再定义一个 const 限定的 f函数 析构函数和构造函数不可定义为 const 函数,
静态函数可定义为 const 函数(此种定义无使用价值)。
6, 类的对象数组:
对象数组中的每个元素都是一 个对象。
对象数组元素的使用同普通对象使用相同。
对象的指针可指向对象, 对象的指针可指向对象数组中的元素。
可定义对象的指针数组, 该数组中的每个元素都是指针。
定义对象数组时要调用多次构造函数。
7, 指向函数的指针和 指向成员函数的指针
1)
定义形式:
类型 (* 指针名)(参数类型, 参数类型);
例如:
int (*pf)(int, int, int); 表示 pf能指向返回值为 int, 并且有三个 int 型参数的函数。
若有函数 int f(int a, int b, int c)
{ //函数体
}
则可使用 pf=f; 使得 pf指向 f函数。
通过*pf(1, 2, 3); 形式来调用函数 f。
2)
定义形式:
类型 (类名:
:
* 指针名)(参数类型, 参数类型);
例如:
int (A:
:
*pf)(int, int, int);
表示 pf能指向 A 类中返回值为 int, 并且有三个 int 型参数的成员函数。
不可指向其他类中的成员函数。
若有 A 类的成员函数 int A:
:
f(int a, int b, int c)
{ //函数体
}
则可使用 pf=A:
:
f; 使得 pf指向 A 类的成员函数 f。
通过 (对象名.*pf)(1, 2, 3); 形式来调用成员函数 f。
8, 阅读程序, 说明程序运行结果, 理解函数指针 int max(int a,int b) {return a>b?a:b;} void main(){
int (*p)(int ,int );
p=max;
(*p)(1,2);} 9, 假定有 A 类, 并 A 类中有成员函数 max, 理解此程序中指向成员函数的指针的使用方式 int A :: max(int a,int b) {return a>b?a:b;} void main(){
int (A :: *p)(int ,int );
A
a;
p=A :: max;
(a.*p)(1,2);}
10, 有如下定义的类 complex, 并声明 add 函数为友元函数, 根据程序功能给出 add 函数的定义。
add 函数完成两个 complex 对象求和运算。
请写出程序运行结果。
11, 定义 dog 类, 具有数据成员 name, 存放每条狗的名字, 同时完成如下功能:
有数据成员 dogs能够记录以定义 dog 对象的个数, 并有成员函数 show 输出该当前已定义对象的个数。
完成类的定义,并给出测试程序, 测试程序中先用 show 函数输出未定义对象时 dog 对象的数目, 然后定义三个 dog对象, 再输出 dog 对象的数目。
热门文章:
- 最新文明礼貌月活动策划,文明礼貌月活动方案(优秀1合集)(全文完整)2024-08-22
- 2023年医院护士面试自我介绍(优秀17篇)2024-08-22
- 2023年最新六年级自我介绍(汇总18篇)2024-08-22
- 学生会个人简历如何写(优秀9篇)2024-08-22
- 2023四年级学生自我介绍,四年级学生自我介绍(大全8篇)(全文完整)2024-08-22
- 房屋租赁合同书样本,房屋租赁合同书(优质11篇)【精选推荐】2024-08-22
- 设备租赁合同(通用12篇)2024-08-22
- 最新转让协议书才有法律效力(大全10篇)(全文完整)2024-08-22
- 2023海边捡垃圾社会实践报告,垃圾处理社会实践报告(优秀8篇)(范文推荐)2024-08-22
- 最新外科护士自我鉴定(实用18篇)2024-08-22