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

举报
YY的代码生活 发表于 2023/07/03 09:44:12 2023/07/03
【摘要】 ​​编辑​​  前言大家好吖,欢迎来到 YY 滴 C++系列 ,热烈欢迎!【 '类与对象'-三部曲】的大纲主要内容如下:​编辑如标题所示,本章是【 '类与对象'-三部曲】三章中的第三章节——对象&成员章节,主要内容如下:​编辑目录一.const成员/成员函数一.用const修饰this指针的好处——含权限知识点二.能否所有的成员函数都加上const? 三.几个的使用场景二.匿名对象(即临时对...

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+引用 :会延长匿名对象在当前函数局部域生命周期
int main()
{
    A aa(1);  // 有名对象 -- 生命周期在当前函数局部域
    A(2);     // 匿名对象 -- 生命周期在当前行

    Solution sl;
    sl.Sum_Solution(10);
    Solution().Sum_Solution(20);

    //A& ra = A(1);  // 匿名对象具有常性
    const A& ra = A(1); // const引用延长匿名对象的生命周期,生命周期在当前函数局部域
    A(10);

    Solution().Sum_Solution(20);

    string str("11111");
    push_back(str);

    push_back(string("222222"));

    push_back("222222");

    return 0;
}

三.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;

代码演示: 

class A
{
 public:
   A()                构造函数
  { ++_scount; }
   A(const A& t)      拷贝构造
  { ++_scount; }
   ~A()               析构函数
  { --_scount; }
   static int GetACount() 
  { return _scount; }
 private:
   static int _scount;
};

int A::_scount = 0;    静态成员变量类外定义

void TestA()
{
 cout << A::GetACount() << endl;       ::来访问静态成员变量
   A a1, a2;
   A a3(a1);
 cout << A::GetACount() << endl;
}

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。