我是靠谱客的博主 高挑月饼,这篇文章主要介绍C++ Effictive 第6章 继承与面向对象设计 笔记,现在分享给大家,希望可以做个参考。

继承意味着"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模式

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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++内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(88)

评论列表共有 0 条评论

立即
投稿
返回
顶部