C++11新特性(80)-继承的构造函数与多重继承

复习

本文算是前面文章的继续。

对于继承的构造函数,C++11通过一个简单的using语句,使得继承一个类时可以省去一些麻烦。具体可以参照下面的文章。

C++11新特性(59)-继承的构造函数

https://mp.weixin.qq.com/s/BGUa7-RSCtFRnBYjUVFFDA

 

多重继承的情况

上述方法在多重继承时仍然有效,除了一种情况:被继承的父类的构造函数据用相同的签名。这时C++11会产生编译错误。例如下面的代码:

C++11新特性(80)-继承的构造函数与多重继承

错误的原因就是从两个基类继承来的SubClass::SubClass(int v)冲突了。

 

解决办法

这种情况也可以看做是一种二义性,所以解决的办法也类似:说清楚就行了。这里只对SubClass进行修改:

C++11新特性(80)-继承的构造函数与多重继承

高亮的部分就是修改内容,直接定义了SubClass(int v)构造函数并显式调用的Base1和Base2的构造函数。调用Base2时还乘了个2,只是想表明可以随意调用基类的构造函数,并没有什么太特殊的含义。

 

作者一句话

本文的内容只是针对使用新特性时可能发生的错误的一种处理方式,本身其实也算不上什么新特性。

    

示例代码下载地址

https://github.com/xueweiguo/OOThinking/blob/master/20180526%20SameConstructor.cpp

 

觉得本文有帮助?请分享给更多人。

阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

C++11新特性(80)-继承的构造函数与多重继承