C++11之继承构造函数
来源:互联网 发布:全景图 js 编辑:程序博客网 时间:2024/06/05 06:29
问题场景
类的继承中,如果子类想使用父类的构造函数,则需要在子类的构造函数中声明使用父类的构造函数,例子如下:
struct A{ A(int i){}};struct B:A{ B(int i):A(i),d(i){} int d;};
但是如果父类中含有多种版本的构造函数,那么子类的构造函数需要多种版本的实现,实现起来很不方便。如下例子:
struct A{ A(int i) {} A(double d,int i){} A(float f,int i,const char* c){} //...等等系列的构造函数版本号};struct B:A{ B(int i):A(i){} B(double d,int i):A(d,i){} B(folat f,int i,const char* c):A(f,i,e){} //......等等好多个和基类构造函数相应的构造函数};
解决方法
通过使用using方式来解决这个问题。方式如下:
struct A{ A(int i) {} A(double d,int i){} A(float f,int i,const char* c){} //...等等系列的构造函数版本号};struct B:A{ using A::A; //关于基类各构造函数的继承一句话搞定 //......};int main(){ B b(356);//使用方式}
这样会降低开发者的开发成本,使用起来更加的方便一些。
注意事项
- 对于继承构造函数来说,参数的默认值是不会被继承的,并且,默认值会导致基类产生多个构造函数版本号(即参数从后一直往前面减。直到包括无參构造函数,当然假设是默认复制构造函数也包括在内),这些函数版本号都会被派生类继承。
当派生类拥有多个基类时,多个基类中的部分构造函数可能导致派生类中的继承构造函数的函数名。例如:
struct A{A(int){}};struct B{B(int){}};struct C:A,B{using A::A;using B::B;};
上述代码中的A和B的构造函数会导致C中会重复定义相同类型的继承构造函数。
假设基类的构造函数被声明为私有构造函数或者派生类是从基类虚继承的,那么就不能在派生类中声明继承构造函数。
- 假设一旦使用了继承构造函数,编译器就不会为派生类生成默认构造函数。
阅读全文
0 0
- C++11之继承构造函数
- 【C#】 之 构造函数
- C++之构造函数(三) 多重继承构造函数初始化
- js继承之二-----借用构造函数
- C++继承之子类的构造函数
- 初识c#---继承和继承关系中的构造函数
- objective-c之构造函数
- javascript 的 继承(二) 之 借用构造函数继承
- C++-继承:构造函数和析构函数
- C++11初窥二: 继承构造函数和委派构造函数
- C++11中继承构造函数和委派构造函数
- 原型继承、构造函数继承
- C++11中的继承构造函数
- C++ 11的继承构造函数
- 构造函数和继承
- java 继承 构造函数
- .继承、构造函数 C++
- C#构造函数继承
- 记录
- RxJava2笔记(3)—RxJava结合Retrofit使用
- CSS解决方案
- 关于xgboost,你需要知道的问题
- Java入门教程
- C++11之继承构造函数
- C# 网络爬虫——分析目标网站
- Java的几个基本类型之间的相互转换
- 小程序系列——进
- 中断及中断处理过程
- Paging-linear-translate.py
- vc6.0 提取*.lst文件,中函数地址,数据地址,应用实例 红色部分显示
- 【python】【穆晨】【171208】连续第五十九天总结
- PELCO协议