1.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;
}