• const成员函数 以及 取地址及const取地址操作符重载


    目录

    const成员函数

    结论:

    取地址及const取地址操作符重载


    const成员函数

            将const 修饰的 成员函数 称之为 const成员函数 const 修饰类成员函数,实际修饰该成员函数的(*this) ,表明在该成员函数中 不能对类的任何成员进行修改
            this指针本来就是const,函数后的const修饰的是对象,表示不能对对象进行修改。
            我们来看看下面的代码
    1. class Date
    2. {
    3. public:
    4. Date(int year, int month, int day)
    5. {
    6. _year = year;
    7. _month = month;
    8. _day = day;
    9. }
    10. void Print()
    11. {
    12. cout << "Print()" << endl;
    13. cout << "year:" << _year << endl;
    14. cout << "month:" << _month << endl;
    15. cout << "day:" << _day << endl << endl;
    16. }
    17. void Print() const
    18. {
    19. cout << "Print()const" << endl;
    20. cout << "year:" << _year << endl;
    21. cout << "month:" << _month << endl;
    22. cout << "day:" << _day << endl << endl;
    23. }
    24. private:
    25. int _year; // 年
    26. int _month; // 月
    27. int _day; // 日
    28. };
    29. void Test()
    30. {
    31. Date d1(2022,1,13);
    32. d1.Print();
    33. const Date d2(2022,1,13);
    34. d2.Print();
    35. }
    请思考下面的几个问题:
            1. const对象可以调用非 const 成员函数吗?(不可)
            2. 非 const 对象可以调用 const 成员函数吗?(可以)
            3. const成员函数内可以调用其它的非 const 成员函数吗?(不可)
            4. 非 const 成员函数内可以调用其它的 const 成员函数吗?(可以)

    结论:

            只要成员函数中不需要修改成员变量(不需要修改对象),最好都加上const

    取地址及const取地址操作符重载

            这两个默认成员函数一般不用重新定义 ,编译器默认会生成。
    1. class Date
    2. {
    3. public :
    4. Date* operator&()
    5. {
    6. return this ;
    7. }
    8. const Date* operator&()const
    9. {
    10. return this ;
    11. }
    12. private :
    13. int _year ; // 年
    14. int _month ; // 月
    15. int _day ; // 日
    16. };
            这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需要重载,比如想让别人获取到指定的内容!
    例如:
    1. class A
    2. {
    3. public:
    4. // 我们不实现,编译器会自己实现,我们实现了编译器就不会自己实现了
    5. // 一般不需要我们自己实现
    6. // 除非不想让别人取到这个类型对象的真实地址
    7. A* operator&()
    8. {
    9. return nullptr;
    10. }
    11. const A* operator&() const
    12. {
    13. return (const A*)0xffffffff;
    14. }
    15. private:
    16. int _a1 = 1;
    17. int _a2 = 2;
    18. int _a3 = 3;
    19. };
    20. int main()
    21. {
    22. A aa1;
    23. const A aa2;
    24. cout << &aa1 << endl;
    25. cout << &aa2 << endl;
    26. return 0;
    27. }

    这个博客如果对你有帮助,给博主一个免费的点赞就是最大的帮助

    欢迎各位点赞,收藏和关注哦

    如果有疑问或有不同见解,欢迎在评论区留言哦

    后续我会一直分享双一流211西北大学软件(C,数据结构,C++,Linux,MySQL)的学习干货以及重要代码的分享

  • 相关阅读:
    点云处理【六】(点云分割)
    COX回归影响因素分析的基本过程与方法
    React过渡动画组件
    django csrfMiddleware的一些理解&跨站和跨域
    [附源码]java毕业设计基于Web留学管理系统
    宇宙数字宣布2023年上半年盈利翻倍,数字货币挖矿业务持续增长
    MySQL的数据库引擎介绍
    30 个 Python 技巧,加速你的数据分析处理速度
    自制操作系统日志——第九天
    k8s-集群里的三种IP(NodeIP、PodIP、ClusterIP)
  • 原文地址:https://blog.csdn.net/m0_73751295/article/details/138046289