c++ 附赠课程的知识点记录

(1) 静态变量的赋值

再一个例子:

(2) 一般在定义类的赋值运算符函数时, operator = ( const A& a ) 函数,应避免自赋值的情况,就是把对象 a 又赋值给 对象a 如同 a = a 这样的情况。就是在 库代码中, STL 库大师们也要考虑这种情况。以 类 string 为例,函数体的逻辑就是什么也不做。处理函数返回值时直接把原对象返回即可:

( 3 ) 存在继承关系时,子类的 copy 构造函数与赋值运算符函数的书写。参考库代码 map 类的实现:

同时由上图可知, copy 构造函数与赋值运算符函数有功能相同的地方,可以如库代码般,把实现 copy 动作的代码封装为一个新的函数,并被 copy 构造函数和赋值运算符函数调用。

(4) is_a 关系 : 子类与父类应保持功能的一致性。若功能差异较大,则不应采用继承方式。 is_a 表示,使用父类的场合,也可以用子类替代。对于父类的非虚函数,子类不应该遮蔽。

( 5 ) 可以在类外为父类中的纯虚函数增加函数体:

这么做的目的是为了让子类有更多的选择,既可以直接使用父类中的纯虚函数体,也可以自定义。

(6) has_a : 一个类的数据成员是另一个类类型。这是组合关系。

is_implemented_in_terms_of : 基于某种已知类型来构建新的类,比如 STL 库代码里依据双端队列 deque 来构造栈 stack 和队列 queue 。

(7)委托关系:一个类里包含了指向另一个类的指针。把本成员函数的功能,交给另一个类去实现,起名为委托。

(8) 父子继承时 , 除了 public 继承 ,用 protected 或private 继承时, 父类指针或父类引用指向子类对象已没有意义,因为父类指针或父类引用没有权限在子类外访问这些继承自父类的成员。如下图:

( 9 ) 禁止一个类的 copy 构造与赋值运算符的三种方式:

其实还有第三种方式,就是把这俩函数改为 private 修饰,这样外界也就无法使用这两个函数。

(10) 不要直接把 类的成员变量设置为 public ,宜设置为 private ,并对外提供 getData() 这样的成员函数,并且类内定义的成员函数会被视为内联函数,被编译器优化,不会造成效率的下降。

(11) 不要在构造与析构函数中调用虚函数。虚函数在父子函数的定义中是不同的。构造与析构时,类对象在创建或销毁过程中,可能导致无法调用到正确版本的虚函数。父类的构造函数中调用虚函数,调用的还是父类中的虚函数版本,因为子类还没有创建完毕。父类的析构函数调用虚函数,还是调用父类的版本,因为子类的虚函数版本已经被销毁。这是不符合程序员原意的错误。

(12) 一个类的析构函数不被 public 修饰,都会导致无法创建该类的对象。因为编译器无法从外部调用类的析构函数。

(13) 什么样的类无法生成其对象? 含有纯虚函数;默认构造函数等构造函数被 protected 修饰。但可以创建其子类对象。

谢谢

相关推荐
不会就选b14 分钟前
C++补充部分(一)--lambda 表达式
开发语言·c++
Pniubi3 小时前
HashMap的扩容和树化边界
java·开发语言
gCode Teacher 格码致知5 小时前
Pandas教学-17:Series与Dataframe的关系
开发语言·python·pandas
发量惊人的中年网工5 小时前
分公司访问总部ERP慢怎么办?SD-WAN组网的排查与验收要点
服务器·开发语言·php
下页、再停留5 小时前
【C#桌面客户端系列学习-15】生成可视化图表之折线图、柱状图、饼状图
开发语言·c#
ShineWinsu5 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素
益莱储中国7 小时前
深度解析:RF 实验室从 5G迈向 6G 的过程中保持技术领先与设备升级的路径
开发语言·php
丰色木夕8 小时前
Ubuntu22.04下源码编译安装USD-Brep
c++·ubuntu·nvidia·usd-brep
benchmark_cc8 小时前
Python 量化系统如何设计统一的数据访问接口:从策略解耦到数据层架构
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
const_qiu8 小时前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python