1.静态成员
复习:static 修饰局部变量,生命周期变长,为整个程序,一般用于计数
static 修饰全局变量,这个变量只能在当前文件中使用
static 修饰函数,这个函数只能在当前文件中使用
static 修饰的成员变量和函数,表示这个成员归整个类共有
1.1 静态成员变量
class 类名{
static 数据类型 变量名;//声明
};
注意:(见代码09static.cpp)
(1)静态成员变量必须在类的外部单独定义,因为他不会随着对象的创建而被定义
数据类型 类名::变量名 = 初始值
(2)静态成员变量的存储形式和全局变量一样,所不同的是静态成员变量受到类的作用域和访控属性的限定
(3)非静态成员变量属于某个对象的,静态成员变量属于整个类,也就是在所有该类的对象间所共享, 既可以 通过类名也可以通过对象名去访问静态成员变量(4)对一个类进行sizeof计算时,不包含静态成员变量的大小
当对于一个空类进行sizeof运算时,大小是 1;
1.2 静态成员函数
class 类名{
static 返回值类型 函数名(形参名)
{
函数体;
}
};
注意:
(1)静态成员函数只能访问静态成员变量,受到类的作用域和访控属性的限制
(2)非静态成员函数既可以访问非静态成员,也可以访问静态成员
(3)静态成员函数中没有this指针,也就没有常属性
练习:
自定义一个类,要求这个类有且只能有一个对象;(见代码10static.cpp)
2.成员指针
如: class Student{ string m_name;} (见代码 02memPtr.cpp)string Student::*pName = &Student::m_name; //1.定义一个成员变量指针指向成员变量m_name
Student s1;
s1.*pName = "wangfei";
2.1指向成员变量的指针
(1)定义形式成员变量的数据类型 类名::* 指针名;//指向的是这个类中的成员变量
(2)赋值/初始化
指针名 = &类名::成员变量名;
(3)使用(解引用)
对象名.成员变量名 => 对象名.*指针名
对象指针->成员变量名 => 对象指针->*指针名
2.2 指向成员函数的指针
(1) 定义形式函数的返回值类型(类名::*函数指针名) (形参表)
(2) 赋值/初始化
函数指针名 = &类名::函数名;
(3) 使用(解引用)
(对象.函数名)() => (对象.*函数指针名)()
(对象指针->*函数指针名)();
注意:
定义指向静态成员函数指针时,不需要在指针名前面加"类名::"