Essential C++ 学习笔记(五)

来源:互联网 发布:淘宝售后是做什么的 编辑:程序博客网 时间:2024/05/01 05:19

5.1 面向对象编程概念

1. 面向对象风格的三个独特概念: 继承(inheritance), 多态(polymorphism), 动态绑定(Dynamic binding).

2. 多态和动态绑定的特性, 只有在使用pointer或reference时才能发挥.


5.2 面向对象编程思维

1. 当程序定义出一个派生对象时, 基类和派生类的constructor都会被执行起来. 但派生类被摧毁时,  基类和派生类的destructor

也都会被执行起来(但次序颠倒).

2. 基类被声明为protected 的所有成员都可以被派生类直接取用, 除此派生类之外, 都不得直接用protected 成员.

3. 使用派生类不需刻意区分"继承而来的成员"和"自身定义的成员", 两者的使用完全透明.


5.4 定义一个抽象基类

1. 定义抽象类的第一个步骤是找出所有子类共通的操作行为.

    第二步是找出哪些行为与型别相依, 也就是说, 有哪些操作行为必须根据不同的派生类而有不同的实现方式.

    第三步是试着找出每个操作行为的存取层级.


2. 每个虚拟函数, 必须有其定义. 如果对于该类而言, 这个虚拟函数并无实质意义的话, 那么可设为纯虚拟函数 (pure virtual function).

凡基类定义有一个或多个虚拟函数, 应该要将其destructor声明为virtual.


5.5 定义一个派生类

1. 在类本身之外对虚拟函数进行定义时, 不需指明关键词virtual.

2. 最好跳过虚拟函数机制, 是该函数在编译期就完成决议, 不需等到执行期才决议, 这就是为什么要指明调用对象的原因.

3. 每当派生类的某个member与基类的member同名时, 便会遮蔽住基类的那份member. 在基类和派生类中提供同名的non-virtual 函数,

并不是好的解决方法.


5.7 基类应该多抽象

1. data members 如果是个reference, 则必须在constructor的 member initialization list中加以初始化. 如果data members 是个pointer,就无此限制:

可以在constructor内加以初始化, 也可以先将它初始化为null, 稍后再令他指向某个有效的内存地址.


5.9 在派生类中定义一个虚拟函数

1. 在派生类中, 为了改写基类的某个虚拟函数, 而进行声明操作时,不一定要加上关键词virtual.

2. 在基类得constructor中, 派生类的虚拟函数绝对不会被调用.

3. 多态需要一层间接性, 唯有以基类的pointers和references才能支持面向编程的概念.


原创粉丝点击