一、静态(重点)
c++静态成员:可以实现多个对象之间的数据共享。
class Student {
public:
char color;
static int n_eyes;//静态成员变量
Student() : color('b') {}
void modify() {
color = 'w';
n_eyes = 10;//动态成员函数可以修改静态成员变量的值
}
static void revise()//静态成员函数
{
color = 'r';//静态成员函数不能修改动态成员变量的值,报错,因为不知道修改的是哪个对象
n_eyes = 10;
}
};
int Student::n_eyes = 2;//类的静态成员要放到类的外面初始化
当有多个对象时,修改其中一个对象的静态成员变量的值,其他对象中的该静态成员变量的值也被修改。(共享一份)
二、友元
友元提供了不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。
class Student {
private:
int age;
friend void good_friend(Student& s);//声明一个全局函数为友元,声明的位置不固定,也可以放到public下面
friend class Teacher;//声明一个类为友元
public:
int id;
Student() : age(18), id(0) {}
void ask(Teacher& t){
cout << t.id << endl;
cout << t.age << endl;//如果下面不声明则这里访问不到
}
};
void good_friend(Student& s) {
cout << s.id << endl;
cout << s.age << endl;//age为私有成员变量,如果上面不声明则这里访问不到
}
class Teacher {
int age;
friend void Student::ask(Teacher& t);//声明其他类的成员函数为友元
public:
int id;
Teacher() : age(18), id(0) {}
void ask(Student& s) {
cout << s.id << endl;
cout << s.age << endl;//如果上面不声明则这里访问不到
}
};
三、类的大小(小重点)
class Student {};//sizeof(s)=1(占位符)
class Student {
public:
int id;
};//sizeof(s)=4
class Student {
public:
int id;
static int age;//存储在类的外面,不占类本身的大小
};//sizeof(s)=4
class Student{
public:
int id;
static int age;
void fun1() {}
static void fun2(){}//这两个函数也是放类的外面,不占类本身的大小
};//sizeof(s)=4