C++ Primer Plus第五版+习题重点笔记(p250-300)

第七章 类(下)

  1. clear需要访问Screen的私有成员;而要想令这种访问合法,Screen需要把 window mgr 指定成它的友元

  2. 如果一个类指定了友元类,则友元类的成员函数可以访问此类包括非公有成员在内的所有成员

  3. 每个类负责控制自己的友元类或友元函数。

  4. 除了令整个 window mgr作为友元之外,Screen还可以只为clear 提供访问权限当把一个成员函数声明成友元时,我们必须明确指出该成员函数属于哪个类

  5. Extern 用法

在这里插入图片描述在这里插入图片描述

  1. 类就是一个作用域的事实能够很好地解释为什么当我们在类的外部定义成员函数时必须同时提供类名和函数名(参见7.1.2节,第230页)。在类的外部,成员的名字被隐藏起来了。

在这里插入图片描述

  1. 另一方面,函数的返回类型通常出现在函数名之前。因此当成员函数定义在类的外部时,返回类型中使用的名字都位于类的作用域之外。

  2. 编译器处理完类中的全部声明后才会处理成员函数的定义

  3. 一般来说,内层作用域可以重新定义外层作用域中的名字,即使该名字已s经在内层作用域中使用过。然而在类中,如果成员使用了外层作用域中的某个名字,而该名字代表种类型,则类不能在之后重新定义该名字

  4. 尽管类的成员被隐藏了,但我们仍然可以通过加上类的名字或显式地使用this指针来强制访问成员

  5. 不要把成员名字作为参数或其他局部变量使用

  6. 如果成员是const、引用,或者属于某种未提供默认构造函数的类类型,我们必须通过构造函数初始值列表为这些成员提供初值。

  7. 构造函数初始值列表中初始值的前后位置关系不会影响实际的初始化顺序。

  8. 最好令构造函数初始值的顺序与成员声明的顺序保持一致。而且如果可能的话,尽量避免使用某些成员初始化其他成员。

  9. 我们不提供实参也能调用上述的构造函数,所以该构造函数实际上为我们的类提供了默认构造函数。

  10. 和其他构造函数一样,一个委托构造函数也有一个成员初始值的列表和一个函数体。在委托构造函数内,成员初始值列表只有一个唯一的入口,就是类名本身。和其他成员初始值一样,类名后面紧跟圆括号括起来的参数列表,参数列表必须与类中另外一个构造函数匹配。

  11. 当一个构造函数委托给另一个构造函数时,受委托的构造函数的初始值列表和函数体被依次执行。

在这里插入图片描述在这里插入图片描述

  1. 关键字 explicit 只对一个实参的构造函数有效。需要多个实参的构造函数不能用于执行隐式转换,所以无须将这些构造函数指定为explicit的。只能在类内声明构造函数时使用explicit 关键字,在类外部定义时不应重复

  2. 当我们用 explicit 关键字声明构造函数时,它将只能以直接初始化的形式使用

  3. static cast可以使用explicit 的构造函数

  4. 接受一个单参数的 const char*的string构造函数(参见3.2.1节,第76页)不是explicit 的。
    接受一个容量参数的vector构造函数(参见3.3.1节,第87页)是explicit的

  5. 聚合类初始值的顺序必须与声明的顺序一致

  6. 与初始化数组元素的规则(参见3.5.1节,第101页)一样,如果初始值列表中的元素个数少于类的成员数量,则靠后的成员被值初始化(参见3.5.1节,第101页)。

  7. 在6.5.2节(第214页)中我们提到过 constexpr 函数的参数和返回值必须是字面值类型。除了算术类型、引用和指针外,某些类也是字面值类型。和其他类不同,字面值类型的类可能含有constexpr函数成员。这样的成员必须符合constexpr函数的所有要求,它们是隐式const的(参见7.1.2节,第231页)。
    在这里插入图片描述

  8. constexpr构造函数必须初始化所有数据成员,初始值或者使用constexpr构造函数或者是一条常量表达式。

  9. 静态成员函数由于不与具体对象关联,没有 this 指针,因此有一些使用上的限制:不能声明为 const,也不能访问或调用非静态成员
    在这里插入图片描述

  10. 和其他的成员函数一样,我们既可以在类的内部也可以在类的外部定义静态成员函数。当在类的外部定义静态成员时,不能重复static关键字,该关键字只出现在类内部的声明语句

  11. 必须在类的外部定义和初始化每个静态成员。和其他对象一样,一个静态数据成员只能定义一次。

  12. 类似于全局变量(参见6.11节,第184页),静态数据成员定义在任何函数之外。因此一旦它被定义,就将一直存在于程序的整个生命周期中。

  13. 即使一个常量静态数据成员在类内部被初始化了,通常情况下也应该在类的外部定义一下该成员。

在这里插入图片描述

第七章习题

在这里插入图片描述

  1. 显示内联和隐式内联
    在这里插入图片描述

  2. 一个不完全类型。我们可以定义指向不完全类型的指针,但是无法创建不完全类型的对象

  3. 在这里插入图片描述

  4. 在这里插入图片描述

  5. 在这里插入图片描述

  6. 聚合类必须满足一些非常苛刻的条件,其中一项就是没有类内初始值

  7. 除了静态常量成员之外,其他静态成员不能在类的内部初始化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/30893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子书(chm)-加载JS--CS上线

免责声明: 本文仅做技术交流与学习... 目录 cs--web投递 html(js)代码 html生成chm工具--EasyCHM 1-选择powershell 模式 生成 2-选择bitsadmin模式生成 chm反编译成html cs--web投递 cs配置监听器--->攻击---->web投递---> 端口选择没占用的, URL路径到时候会在…

《昇思25天学习打卡营第1天 | 认识MindScope AI框架和昇思大模型平台》

活动地址:https://xihe.mindspore.cn/events/mindspore-training-camp 昇思MindSpore学习笔记:探索AI的无限可能 嗨,AI爱好者们!今天,我要带你们深入了解一个强大的全场景深度学习框架——昇思MindSpore。 准备好了吗…

AWR1843BOOST上的TM4C1294NCPDT是干啥用的?

摘要:AWR1843BOOST上面有2个体积较大的芯片,一片是雷达,另一片是什么呢? 答案:它就是XDS110仿真器。 有了它,就不用再买一个仿真器了。 从AWR1843BOOST的原理图中可以看到整个 BOOST板子上只有2个比较大的…

C++switch陈述

C 使用关键字 switch、case、default对一个常数执行不同的分流,这构成多重选择的结构,形式如下 简单来说,switch后头接一小括弧,小括弧内为一常数运算式,计算出常数值若与其后case的位标(label) 相符,就会执…

[深度优先搜索DFS]迷宫问题

描述 定义一个二维数组: int maze[5][5] {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,}; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走&#xff0…

Prometheus入门

Prometheus入门 Setup Reference:https://prometheus.io/docs/introduction/overview/ exporters:你可以部署在你想要获取metrics的应用旁,接收Prometheus请求,从应用程序中收集数据并转换为正确的格式,最后返回给Prometheus;Service Dis…

创建百度百科词条要多少钱?看这篇

“百度百科词条人人可编辑,词条创建和修改均为免费,不存在官方及代理商付费代编。” 是的,百度百科免费开放,任何人都可以自己做,但是作为一个给上百家企业和个人创建百度百科词条的专业人士来说,给大家一…

面试题——RabbitMQ

★1.如何保证消息的幂等性?(如何避免消息重复投递) 生产端: 在消息发送前,先查询数据库此消息是否被处理过。处理过则忽略、否则继续处理,并在处理完成后修改状态为已处理。 消费端: 每个消息都生成全局唯一ID或业务I…

模型预测控制MPC详解(附带案例实现)

模型预测控制MPC详解(附带案例实现) 文章目录 模型预测控制MPC详解(附带案例实现)1. 最优控制问题2. 什么是MPC3. 二次规划Quadratic Programming4. MPC为什么可以转换成QP问题(推导过程)5. MPC总结5.1 MPC…

QT中QSettings的使用系列之四:QSettings与操作QJson(registerFormat())

1、核心代码 #include "widget.h" #include "ui_widget.h" #include <QSettings> #include <QJsonObject> #include <

基于51单片机的篮球计分器设计

一.硬件方案 本设计用由AT89C51编程控制LED七段数码管作显示的球赛计时计分系统。该系统具有赛程定时设置、赛程时间暂停、及时刷新甲乙双方的成绩等功能。 电路主要由STC89C52单片机最小系统数码管显示模块数码管驱动模块蜂鸣器模块按键模块&#xff1b; 二.设计功能 &…

哔哩哔哩视频URL解析原理

哔哩哔哩视频URL解析原理 视频网址解析视频的原理通常涉及以下几个步骤&#xff1a; 1、获取视频页面源代码&#xff1a;通过HTTP请求获取视频所在网页的HTML源代码。这一步通常需要处理反爬虫机制&#xff0c;如验证码或用户登录。 2、解析页面源代码&#xff1a;分析HTML源代…

064、Python 可变参数和关键字参数

在编写函数时&#xff0c;我们可能会存在不确定传入参数数量的情况。那么我们可以使用可变数量的参数。函数中可变数量的参数包括可变参数和关键字参数。 1、可变参数&#xff08;*args&#xff09;&#xff1a; 可变参数允许函数接受任意数量的位置参数。在函数定义中&#…

Transformer学习理解

1.前言 本文介绍当下人工智能领域的基石与核心结构模型——Transformer&#xff0c;为什么说它是基石&#xff0c;因为以ChatGPT为代表的聊 天机器人以及各种有望通向AGI&#xff08;通用人工智能&#xff09;的道路上均在采用的Transformer。 Transformer也是当下NLP任…

java设计原则

1、开闭原则 定义&#xff1a;类&#xff0c;模块&#xff0c;函数对扩展开放对修改关闭。如工厂模式 对扩展开放&#xff1a;模块对扩展开放就意味着&#xff0c;当需求变化时&#xff0c;可以对模块进行扩展&#xff0c;使其满足具有新需求的功能&#xff0c;换句话说就是模…

让我们拯救数学

一&#xff0c; 前言 数学特别是数论面临生死存亡&#xff0c;100年的数论在错误的道路上运行&#xff0c;已经把整个数学颠覆。从挪威数学家v布龙&#xff0c;到意大利数学家邦别里&#xff0c;再到德国数学家法尔廷斯&#xff0c;英国数学家安德鲁怀尔斯&#xff0c;以及中国…

【上海交大】博士生年度进展报告模板

上海交通大学 博士生年度进展报告模板 比较不好找&#xff0c;在交我办中发起申请流程后才能看到链接&#xff0c;链接如下&#xff1a; https://www.gs.sjtu.edu.cn/xzzx/pygl/15

爬取CSDN博文到本地(包含图片,标签等信息)

文章目录 csdnToMD改进将CSDN文章转化为Markdown文档那有什么办法快速得到md文档&#xff1f;例如&#xff1a;获取单个文章markdown获取所有的文章markdown 项目中待解决的问题 csdnToMD 项目原作者&#xff1a;https://gitee.com/liushili888/csdn-is—mark-down 改进后仓库…

vue脚手架 项目打包

目录 01 在脚手架中使用jquery 02 项目的打包 03 ELement UI 框架 01 在脚手架中使用jquery 脚手架中使用jquery的步骤: 1.npm i jquery --save 2.在使用jq的组件里面引入jq 3.import $ from jquery 4.正常使用 02 项目的打包 1.npm run build 项目启动不启动都可以打包 2.…

爬虫补环境,ES6 Class在环境模拟中的应用与优势

相比于使用传统的Object实现补环境框架结构&#xff0c;使用 ES6 的 Class 具有以下优势&#xff1a; 代码维护更方便&#xff1a;Class的语法更简洁直观&#xff0c;方便开发者阅读和维护。组织结构更清晰&#xff1a;Class提供了明确的层次结构&#xff0c;有助于代码的模块…