C++第03课 特殊成员 (二)
1.static成员
static成员特性: 它的调用可以不需要对象,它整个类共有的,(所有对象用的都是同一个),不是某一个对象单独属性。static 的成员虽然不需要对象就可以调用,但是依然是类的权限限定的
+ static数据成员
+ static 修饰的数据成员,就是静态数据成员
+ 不能在类中初始化,必须在类外初始化,在类外初始化的时候不再需要static修饰,但是需要类名限定
+ static成员函数
+ static 写在函数前面,修饰函数,就是静态函数
+ 静态函数在类外实现,也不需要static修饰了
+ 静态函数访问非静态成员,必须指定对象
+ 通过传参指定对象
+ 静态函数中创建的对象,也可以访问非静态数据成员
+ static对象
class MM { public: //const成员必须采用初始化参数列表 MM(string name, int age, int id) :name(name), age(age), id(id) { this->money++; } MM(const MM& obj):name(obj.name),age(obj.age) { cout << "拷贝构造" << endl; }; int getMoney() { return money; } void print() { cout <<"normal\t"<< name << "\t" << age << "\t" << id <<"\t"<<money << endl; } //常成员函数,允许属性不同的同名函数存在,不允许修改数据成员 void print() const { //age = 20; 错误 cout <<"const\t"<< name << "\t" << age << "\t" << id <<"\t" << money <<endl; } void doSomething() { } protected: //常数据成员 const string name; const int age; //普通数据 int id; //静态数据成员,不能在类中初始化 static int money; }; int MM::money = 100; int main() { MM mm("小可爱", 18, 1001); //普通对象优先调用普通函数 mm.print(); //normal //常对象只能调用常成员函数,不能调用普通函数 const MM mm1("小宝贝", 2, 1002); mm1.print(); //const MM mm2 = mm1; //赋值不会复制const属性,调用拷贝构造 mm2.print(); return 0; }