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

这篇具有很好参考价值的文章主要介绍了【C++系列P5】‘类与对象‘-三部曲——[对象&特殊成员](3/3)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

 前言

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

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

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

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

目录

一.const成员/成员函数

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

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

三.几个的使用场景

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

三.static静态成员 

一.静态成员基本知识

二.静态成员特性

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

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

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


一.const成员/成员函数

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

图示: 

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


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

PS:权限知识点在下方

用const修饰this指针的好处:

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

图示:

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

 权限相关知识点:

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

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

图示:

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


二.能否所有的成员函数都加上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(和)

图示:

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


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

原理:

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

代码演示: 文章来源地址https://www.toymoban.com/news/detail-462432.html

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

到了这里,关于【C++系列P5】‘类与对象‘-三部曲——[对象&特殊成员](3/3)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Docker学习三部曲】—— 入门篇

    1️⃣ 什么是 docker ? Docker 是 一种运行应用程序的平台,它可以使应用程序在容器中不受环境差异的影响进行部署和运行 。Docker 的流行度越来越高,是因为它可以帮助在不同的开发者和开发团队之间实现代码的共享和协同开发,并且大大 简化了应用程序的部署,提高了可移

    2023年04月20日
    浏览(49)
  • JavaCV人脸识别三部曲之二:训练

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本文是《JavaCV人脸识别三部曲》的第二篇,前文《视频中的人脸保存为图片》咱们借助摄像头为两位群众演员生成大量人脸照片,如下图,群众演员A的照片保存在 E:temp20211218\\001 man ,B的照片保存

    2024年02月11日
    浏览(37)
  • Java版人脸跟踪三部曲之三:编码实战

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 作为《Java版人脸跟踪三部曲》系列的终篇,本文会与大家一起写出完整的人脸跟踪应用代码 前文《开发设计》中,已经对人脸跟踪的核心技术、应用主流程、异常处理等方方面面做了详细设计,建

    2024年02月12日
    浏览(37)
  • JavaCV人脸识别三部曲之三:识别和预览

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 《视频中的人脸保存为图片》 《训练》 《识别和预览》 作为《JavaCV人脸识别三部曲》的终篇,今天咱们要开发一个实用的功能:有人出现在摄像头中时,应用程序在预览窗口标注出此人的身份,效

    2024年02月11日
    浏览(39)
  • Java版人脸跟踪三部曲之二:开发设计

    如何开发Java版人脸跟踪应用?本篇给出了设计大纲,并解释了相关的重要知识点 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇是《Java版人脸跟踪三部曲》系列的第二篇,前文体验了人脸跟踪的效果,想要编码实现这样的效果,咱们需要做

    2024年02月12日
    浏览(41)
  • vscode上的git三部曲+git pull操作

    git三部曲:git add .、git commit -m \\\'\\\'、git push,命令在连接远程仓库的本地仓库路径下的终端执行。 vscode上的可视化操作如下:  1、对仓库里的文件做更改,让仓库操作的地方有变化。 2、 点击+号,让文件进入缓存,此步骤相当于终端执行命令git add .  3、在这里输入信息并点击

    2024年02月11日
    浏览(39)
  • Go语言基准测试(benchmark)三部曲之一:基础篇

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos Go的标准库内置的testing框架提供了基准测试(benchmark)功能,可以用来验证本地方法在串行或者并行执行时的基准表现,帮助开发者了解代码的真实性能情况,例如一个方法执行一次的平均耗时,还能

    2024年02月06日
    浏览(50)
  • 数据结构:堆的三部曲(二)top K问题

    top k问题解决的是获取前几个最值的问题。 我们知道 堆的功能主要是选数,选出最大值或者最小值 。那么我们每次获取堆顶元素后,再将剩余元素调整成堆,就可以选出次大的数,如果我们只想要前k个最大值或者最小值,就只需要获取堆顶元素k次,调整k次。比如王者荣耀

    2024年02月02日
    浏览(40)
  • 大模型 Dalle2 学习三部曲(二)clip学习

    clip论文比较长48页,但是clip模型本身又比较简单,效果又奇好,正所谓大道至简,我们来学习一下clip论文中的一些技巧,可以让我们快速加深对clip模型的理解,以及大模型对推荐带来革命性的变化。 首选我们来看看clip的结构,如图clip结构比较直观,训练的时候把文本描述

    2024年02月09日
    浏览(39)
  • Go语言基准测试(benchmark)三部曲之三:提高篇

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos -《Go语言基准测试(benchmark)三部曲》已近尾声,经历了《基础篇》和《内存篇》的实战演练,相信您已熟练掌握了基准测试的常规操作以及各种参数的用法,现在可以学习一些进阶版的技能了,在面

    2024年02月06日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包