Pimpl用法及类继承原则

为了减少编译依赖性,提高编译速度,我们可以采取Pimpl方法。

通常,头文件中要尽可能少的include头文件。如果include的文件有变化的话,势必会让自己的头文件重新编译,引起连锁编译,使编译速度非常慢。在我们的头文件代码中经常会看见一些只是引用而不需要知道他的定义的一些使用情况,如:一个类的指针,一个类做为参数或者返回值。这种情况下无需include头文件,只需要前置声明这个类即可,class XXXX;。

对于继承的基类,我们需要判断是否真的需要继承。通常,没有虚函数和保护成员的基类我们可以通过聚合去实现,私有继承的基类也可以通过聚合。为什么要这么做呢?第一是减少类之间的耦合度,第二就是减少include数量。如果一个类通过继承的方式声明,那么就需要include它的基类,这样一来,就增加了编译依赖性。

Pimpl方法,实际上就是将一个类的私有成员(包括成员变量和成员方法)放到这个隐藏指针中,当对这个隐藏指针进行变更时,不会让头文件重新编译,因为对于头文件来讲,这个隐藏指针就是一个指针类型。通常,我们也可以在impl类中增加一个回调指针,指向使用他的类,但是这种做法会破坏类之间解耦和的特性。所以一般采取两种方式:一种是将impl类中的方法和原类中的方法一一对应,而这种方法会让原类看起来就像是一个调用转移的过程。第二种方式是将需要回调原类的方法注册给impl类,这是一种折中方法。


在此要强调,继承是依赖性最强的关系,能用聚合就用聚合。但是如果你是is-a的关系,或者是有虚函数,或者是有保护成员,那么必须用继承,在继承的时候能私有继承就不用公有继承,并且虚函数一般都应该是私有成员~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值