• 【C++系列P5】‘类与对象‘-三部曲——[对象&特殊成员](3/3)


    93e00c515c4641d992ec2719752edc1e.png

     前言

    • 大家好吖,欢迎来到 YY 滴 C++系列 ,热烈欢迎!
    • 【 '类与对象'-三部曲】的大纲主要内容如下

    b1473e15ff2f49cdbffe139579c19944.png

    • 如标题所示,本章是【 '类与对象'-三部曲】三章中的第三章节——对象&成员章节,主要内容如下:

    0a3b83580a7b4e68838c7a0f73eb5554.png

    目录

    一.const成员/成员函数

    一.用const修饰this指针的好处——含权限知识点

    二.能否所有的成员函数都加上const? 

    三.几个的使用场景

    二.匿名对象(即临时对象)

    三.static静态成员 

    一.静态成员基本知识

    二.静态成员特性

    三.静态成员函数和非静态成员函数的调用关系

    四.static的应用:“求1+2+3+...n的和"

    五.static应用:"实现一个类,计算程序中创建出了多少个类对象"


    一.const成员/成员函数

    将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this 指针表明在该成员函数中不能对类的任何成员进行修改

    图示: 

    6b9449e616914c81b34030559b6b1e43.png


    一.用const修饰this指针的好处——含权限知识点

    PS:权限知识点在下方

    用const修饰this指针的好处:

    • 普通对象和const对象都能调用;

    图示:

    461589ef678641d49ab8b65e6e830936.png

     权限相关知识点:

           【权限等级较高的是const和具有常属性的量,权限较低的是普通数据】

    • 权限高的或平级的可以给另一量取别名/取地址(权限的缩小和平移)
    • 权限低的不能给另一量取别名/取地址(权限的放大)

    图示:

    23eb945ac1824c8cb9d54278587f41c8.png


    二.能否所有的成员函数都加上const? 

    答案:不是的,修改成员变量的函数不能加。


    三.几个的使用场景

    请思考下面的几个问题:

    • 1. const对象可以调用非const成员函数吗?no
    • 2. 非const对象可以调用const成员函数吗?yes
    • 3. const成员函数内可以调用其它的非const成员函数吗?no
    • 4. 非const成员函数内可以调用其它的const成员函数吗?yes

    二.匿名对象(即临时对象)

    特性:

    • 匿名对象的生命周期在当前行
    • 匿名对象具有常性
    • const+引用 :会延长匿名对象在当前函数局部域生命周期
    1. int main()
    2. {
    3. A aa(1); // 有名对象 -- 生命周期在当前函数局部域
    4. A(2); // 匿名对象 -- 生命周期在当前行
    5. Solution sl;
    6. sl.Sum_Solution(10);
    7. Solution().Sum_Solution(20);
    8. //A& ra = A(1); // 匿名对象具有常性
    9. const A& ra = A(1); // const引用延长匿名对象的生命周期,生命周期在当前函数局部域
    10. A(10);
    11. Solution().Sum_Solution(20);
    12. string str("11111");
    13. push_back(str);
    14. push_back(string("222222"));
    15. push_back("222222");
    16. return 0;
    17. }

    三.static静态成员 


    一.静态成员基本知识

    声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数

    使用要点:静态成员变量一定要在类外进行初始化 


    二.静态成员特性

    1. 静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区
    2. 静态成员变量必须在类外定义定义时不添加static关键字,类中只是声明
    3. 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问
    4. 静态成员函数没有隐藏的this指针不能访问任何非静态成员
    5. 静态成员也是类的成员,受public、protected、private 访问限定符的限制 

    三.静态成员函数和非静态成员函数的调用关系

    请思考下面的几个问题:

    1. 静态成员函数可以调用非静态成员函数吗?no(无this指针)
    2. 非静态成员函数可以调用类的静态成员函数吗?  yes

    四.static的应用:“求1+2+3+...n的和"

    步骤:

    1. 成员变为静态成员变量
    2. 利用访问操作符与静态成员函数GetRet()得到_ret(和)

    图示:

    acb22e3aeb724383ba714494ba8f3fe5.png


    五.static应用:"实现一个类,计算程序中创建出了多少个类对象" 

    原理:

    • 定义一个静态成员变量_scount,再在类中声明一个访问静态成员变量的静态成员函数GetACount();
    • 构造++_scount,析构--_scount;

    代码演示: 

    1. class A
    2. {
    3. public:
    4. A() 构造函数
    5. { ++_scount; }
    6. A(const A& t) 拷贝构造
    7. { ++_scount; }
    8. ~A() 析构函数
    9. { --_scount; }
    10. static int GetACount()
    11. { return _scount; }
    12. private:
    13. static int _scount;
    14. };
    15. int A::_scount = 0; 静态成员变量类外定义
    16. void TestA()
    17. {
    18. cout << A::GetACount() << endl; ::来访问静态成员变量
    19. A a1, a2;
    20. A a3(a1);
    21. cout << A::GetACount() << endl;
    22. }

  • 相关阅读:
    【BUG】Windows状态栏总卡死解决办法
    【软考】5.1 七层模型/局域网/TCP-IP协议
    多个扇形元素绕圆旋转
    Unity 公用函数整理【一】
    【考研】操作系统——同步互斥问题(P、V操作)1
    Apache HttpClient使用和源码分析
    Linux-8-进程通信
    【元胞自动机】元胞自动机短消息网络病毒传播仿真【含Matlab源码 1289期】
    Shell 常用操作指令
    利用观测云实现业务数据驱动的弹性扩缩容
  • 原文地址:https://blog.csdn.net/YYDsis/article/details/130901850