【Effective C++ Sumary】继承和面向对象设计

本文深入探讨C++中的继承类型,包括公共继承、私有继承与接口继承的区别,以及虚函数、纯虚函数在实现多态中的作用。同时,介绍了非虚函数的静态绑定特性,以及如何通过NVI手法、函数指针和tr1::function实现策略模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

32.public继承应该是 is a 继承关系。试用与base class的每一件事也适用于 derived class,因为每一个derived class 都是一个 base class

33.当我们继承base class并加上重载函数,而又希望重新定义或者复写其中一部分,必须为原来那些在base classs 中被遮掩的成分引入一个using 声明。

34.接口继承和实现继承不同,在Public继承下,derived class总是继承接口。

纯虚函数总是只具体制定接口继承。

(非纯)虚函数指定接口继承以及缺省的实现继承

非虚函数制定接口继承以及强制性实现继承。

35. 考虑虚函数以外的选择:

NVI手法:让public non-virtual成员函数调用private  virtual 函数。优点是可以在非虚函数中提前设定适当场景,并在调用结束后清理。

由函数指针实现strategy模式,用函数指针来做构造函数参数。

由tr1::function完成strategy,好处是函数更加泛化,可以调用外部函数,函数对象,别的类的成员函数来做参数

古典的strategy模式就是把类都做继承,然后类和类之间做复合。(一个类包含了另一个的对象实体)

这样每个继承类也都有独特的方法。

36.不要重新定义继承来的非虚函数。非虚函数为静态绑定,public继承应该是 is a 关系,所以每个派生类一定会继承接口和实现

如果一个基类指针被指向的派生类对象,还是会调用基类的非虚函数。而虚函数则取决于它指向的具体对象

37.不药重新定义继承而来的虚函数的缺省参数。

因为函数是虚继承的,动态绑定的,而参数是静态绑定的。

 那每次都要写同样的缺省参数值,改起来也很麻烦,可以参考NVI手法

38.复合是一个has a 或者 is implemented in terms of 的关系

39.小心使用private继承,它也是 is implemented in terms of 的关系

也用可以复合关系来实现,但是当需要访问报数成员或者重新定义虚函数时,可以考虑Private继承

和复合不一样,Private可以造成empty base class 最优化。(真正的空间大小为0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值