C++第03课 特殊成员 (一)

1.const成员

+ const数据成员
+ 其他地方不能修改const 数据成员
+ 初始化必须采用初始化参数列表的方式进行初始化

class MM {
public:
    //const成员必须采用初始化参数列表
    MM(string name,int age,int id):name(name),age(age),id(id){}
    void print()
    {
        cout << name << "\t" << age << "\t" << id << endl;
    }
protected:
    //常数据成员
    const string name;
    const int age;
    //普通数据
    int id;
};

+ const 成员函数
+ 在当前函数中不能修改数据成员 ,无论什么样的数据成员
+ const成员函数,const是写在相应函数的后面
+ 可以和普通函数同时存在

    void print()
    {
        cout <<"normal\t"<< name << "\t" << age << "\t" << id << endl;
    }
    //常成员函数,允许属性不同的同名函数存在,不允许修改数据成员
    void print() const
    {
        //age = 20;    错误
        cout <<"const\t"<< name << "\t" << age << "\t" << id << endl;
    }

+ const对象
+ 也不能修改数据
+ 只能调用const成员函数

class MM {
public:
    //const成员必须采用初始化参数列表
    MM(string name,int age,int id):name(name),age(age),id(id){}
    MM(const MM& obj):name(obj.name),age(obj.age) { cout << "拷贝构造" << endl; };
    void print()
    {
        cout <<"normal\t"<< name << "\t" << age << "\t" << id << endl;
    }
    //常成员函数,允许属性不同的同名函数存在,不允许修改数据成员
    void print() const
    {
        //age = 20;    错误
        cout <<"const\t"<< name << "\t" << age << "\t" << id << endl;
    }
    void doSomething()
    {

    }
protected:
    //常数据成员
    const string name;
    const int age;
    //普通数据
    int id;
};

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

 

posted @ 2021-09-04 13:52  Creature_lurk  阅读(26)  评论(0编辑  收藏  举报