我是靠谱客的博主 高挑月饼,最近开发中收集的这篇文章主要介绍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模式

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章 继承与面向对象设计 笔记所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部