ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-09-04 14:00:57  阅读:81  来源: 互联网

标签:03 const name MM 成员 C++ id age


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

 

标签:03,const,name,MM,成员,C++,id,age
来源: https://www.cnblogs.com/creature-lurk/p/15226455.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有