一、对象成员的初始化与静态成员
1.对象成员的初始化
对象成员构造函数的调用顺序:取决于在类中的说明顺序
析构函数的调用顺序与构造函数相反
2.静态成员
1)简单成员:声明中不含const、volatile、static的关键字函数
2)静态成员函数的特点:
七点和例子,见教材P108
3)成员名限定(动作):类 :: 数据成员/成员函数
4)类成员限定符(状态):“ :: ”
5)在类体外定义例子:
int Test: :x=30;
二、 Const对象
1. 常对象是指对象常量,格式为:const 类名 对象名;
2.在定义时必须进行初始化,而且在程序中不能再对其进行更新。
只能调用类中的常成员函数,而不能调用类中的其他成员函数,即一个const对象只能访问const成员函数
3.常对象成员分为常成员函数和常数据成员
格式为:类型 函数名(形参表) const;
4.常成员函数为类的只读函数,可以读取数据成员的值,但不可以更新数据成员的值,它也不能调用该类中没有const修饰的其他成员函数。常成员函数定义中的const关键字是函数类型的一部分,因此在其实现部分中也要带上const关键字。
5.类名::类名(形参表):常数据成员名1(值1),常数据成员名2(值2),……
6.声明常对象时:const 类名 对象名;与 类名 const 对象名;是等效的
7.另外const数据成员的初始化只能在构造函数的初始化列表中进行。
三、指向类成员函数的指针
1.指向类A中参数类型列表为list,返回类型为type的成员函数的指针声明形式如下:
type (A :: * pointer)(list)
2.声明及调用
#include <iostream>
using namespace std;
class A
{
private:
int val;
public:
A(int i){val = i;}
int value(int a){return val + a;}
};
void main()
{
int (A::*pointer)(int); //声明指向类A的成员函数的指针
pointer = A::value; //指向具体成员函数value,部分编译器要加&,即&A::value;
A obj(10); //创建对象obj
cout<<(obj.*pointer)(15)<<endl; //对象 使用类的函数指针,输出25,(obj.*pointer)必须有括号
A *pc = &obj; //创建对象指针pc
cout<<(obj->*pointer)(15)<<endl; //对象指针 使用类的函数指针,输出25,(obj->*pointer)必须有括号
}
对象使用类的函数指针时,语法:对象.*类的函数指针
对象指针使用类的函数指针时,语法:对象->*类的函数指针