天天看點

C++第03課 特殊成員 (二)

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