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

发布于:2024-07-06 ⋅ 阅读:(41) ⋅ 点赞:(0)

(1) 静态变量的赋值

在这里插入图片描述

再一个例子:

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

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

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

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2a5e77430cd842c795668a20711b9e62.png

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

(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 修饰。但可以创建其子类对象。

谢谢


网站公告

今日签到

点亮在社区的每一天
去签到