概述
继承意味着"is-a"。如果B继承自A,那么B is-a A。
子类声明与父类函数同名的函数时,父类函数会被遮掩。
使用using Base::func(args...);父类所有func的重载函数都在子类中被声明。此举下,如果子类函数与父类函数参数也一致,父类函数仍然被遮掩。
pure virtual func() 父类不用提供实现,为了让子类只继承接口。
但可以提供实现作为默认行为,子类用Base::func()才能得到此实现。
virtual func() 父类可以提供实现,为了让子类继承接口和实现。
“如果成员函数是个non-virtual函数,意味着它不打算在子类中有不同的行为”
“non-virtual代表着不变性和凌驾特异性”
由Non-Virtual Interface实现Template Method模式
class A { public: virtual void func(); }; ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ class A { public: void func() { // doSomeThing; doFunc(); // doSomeThing; }; private: virtual void doFunc(); };
doSomeThing可以是操作互斥锁,验证约束条件等。
func是doFunc的wrapper
strategy设计模式
默认参数是静态绑定的,函数指针是动态绑定的。
因此用基类指针声明一个继承类对象,并且基类声明了一个带默认参数的纯虚函数,并且继承类重声明了此函数无默认参数版本时,调用函数会调用继承类函数,并用基类给定的的默认参数。
复合意味着has-a(有一个)或者is-inplemented-in-terms-of (根据某物实现出)
编译器不会自动的将一个私有继承的子类转换为父类,公有继承会。
private继承意味着只有实现部分应该被继承,接口部分应该略去。
private也意味着in-implemented-terms-of,与复合相比,尽量使用复合,必要时采用private继承。
最后
以上就是高挑月饼为你收集整理的C++ Effictive 第6章 继承与面向对象设计 笔记的全部内容,希望文章能够帮你解决C++ Effictive 第6章 继承与面向对象设计 笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复