c++对的调用没有匹配的函数_c++11(7)新特性之继承构造函数

本文介绍了C++中派生类如何利用using关键字简洁地继承基类的构造函数,以及处理继承构造函数冲突的方法。当基类有参数的构造函数时,派生类可以通过using A::A来隐式声明并使用基类构造。同时,如果派生类没有匹配的构造函数,将直接调用基类构造。在存在构造函数冲突的情况下,可以使用using声明来解决,但需要注意显式声明的使用。
摘要由CSDN通过智能技术生成

1)派生类继承基类构造的简化

c++98的使用基类有参构造的通用写法:

基类A构造函数有参数,派生类D就必须定义对于的有参构造,再传递给A。

#include 

c++11语法:

8365d37545b023d823604f64c4b3b1aa.png

通过using A::A的声明,把基类的构造函数悉数继承到派生类中。可以理解为,使用后把对于的基类的构造函数给隐式声明了。

2) 继承构造函数冲突的处理方法

类的构造函数继承是要求有唯一性的,比如

#include 

会出现下图错误,意思是已经继承了A的构造就不能再继承B的构造函数。

3a115899c9e2dba4d29332820333446e.png

处理办法:添加显式声明,我在VS2017下测试不成功,在g++下面没有验证。

struct D : A,B
{
	using A::A;
	using B::B;
        D(int){};
};

3)使用继承构造函数后,派生类的构造函数没有调用问题

class 

后来在派生类中添加同样参数的构造函数才能执行。

class 

从上面的例子看出,在使用了继承构造函数后,

如果派生类构造中没有匹配的构造函数,那么就不会被调用,而是直接调用了基类的构造函数,并且把参数传递给了基类。

如果派生类构造函数中有匹配的构造函数,那么当然会调用,并且会自动调用基类同参数构造函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值