面向对象——意图与逻辑
面向对象——意图与逻辑 (二)
面向对象——意图与逻辑(三)
面向对象——意图与逻辑(四)
const 型函数
C++ 支持 const 型变量,也支持 const 型函数,但 const 型函数只能为类的成员函数,不可以是全局函数。
当 const 修饰一个函数,称为const 型函数,是告诉编译器,不允许该函数修改成员变量的值。也即const 型函数只能是类的成员函数。
为什么要显式地将基类的析构函数声明为 virtual
virtual 出现的地方一定是为了使用多态机制;
也即,首先一点,基类的析构函数默认为 non-virtual 的;
那为什么显式地将其声明为 virtual 呢,在做基类的情况下,所谓基类,自然有派生类,派生类一般都会有自己的私有成员变量,基类的析构函数仅仅析构了基类自身的成员变量。
归根结底,还是多态,virtual 就是多态的实现机制。
将基类的构造声明为protected
:
将基类的构造声明为protected的含义:
不允许在外部实例化该类,只允许其派生类调用
继承
所谓共同的基类,则基类的构造对所有的子类都是相同;
这话可从两个方面来理解:
(1)如果一个类作为某些子类共同的基类,则该基类的虚方法,构造函数为全部子类所共有;
基类的成员变量即为所有子类共同的成员变量,且 基类的构造函数也必须在所有子类的构造中予以体现
(2)如果想为一些类抽象出一个共同的基类,则应当抽象出为全部类所共有的构造方法;
mutable 与 友元
一个类内只要有 mutable 关键字,就一定会有 const 关键字,否则无 mutable 存在的意义,mutable 是对 const 条件的放松,就好比类内的友元可以访问私有成员变量一样。
但反过来,就不一定了,也即存在 const 关键字,未必会有 mutable 成员变量;存在私有成员变量未必会有友元(但如果存在友元,一定有私有成员变量)。