继承的构造函数
来源:互联网 发布:php变量的作用域 编辑:程序博客网 时间:2024/04/28 20:26
在C++11新标准中,派生类能够重用其直接基类定义的构造函数。一个类只初始化它的直接基类,出于同样的原因,一个类也只能“继承”其直接基类的构造函数。类不能继承默认、拷贝和移动构造函数。如果派生类没有直接定义这些构造函数,则编译器将为派生类合成它们。
派生类继承基类构造函数的方式是提供一条注明了(直接)基类名的using声明语句。
通常情况下,using声明语句只是令某个名字在当前作用域内可见。而当作用于构造函数时,using声明语句将令编译器产生代码。对于基类的每个构造函数,编译器都生成一个与之对应的派生类构造函数,换句话说,对于基类的每个构造函数,编译器都在派生类中生成一个形参列表完全相同的构造函数。
继承的构造函数的特点
和普通成员的using声明不一样,一个构造函数的using声明不会改变该构造函数的访问级别。例如,不管using声明出现在哪儿,基类的私有构造函数在派生类中还是一个私有构造函数;受保护的构造函数和公有构造函数也是同样的规则。
而且,一个using声明语句不能指定explicit或constexpr。如果基类的构造函数是explicit或者constexpr,则继承的构造函数也拥有相同的属性。
当一个基类构造函数含有默认实参时,这些实参并不会被继承。相反,派生类将获得多个继承的构造函数,其中每个构造函数分别省略掉一个含有默认实参的形参。例如,如果基类有一个接受两个形参的构造函数,其中第二个形参含有默认实参,则派生类将获得两个构造函数:一个构造函数接受两个形参(没有默认实参),另一个构造函数只接受一个形参,它对应于基类中最左侧的没有默认值的那个形参。
如果基类含有几个构造函数,则除了两个例外情况,大多数情况下派生类会继承所有这些构造函数。第一个例外是派生类可以继承一部分构造函数,而为其他构造函数定义自己的版本。如果派生类定义的构造函数与基类的构造函数具有相同的参数列表,则该构造函数将不会被继承。定义在派生类中的构造函数将替换继承而来的构造函数。
第二个例外是默认、拷贝和移动构造函数不会被继承。这些构造函数按照正常规则被合成。继承的构造函数不会被作为用户定义的构造函数来使用,因此,如果一个类只含有继承的构造函数,则它将拥有一个合成的默认构造函数。
- 构造函数的继承
- 继承的构造函数
- 构造函数的继承
- 构造函数的继承
- 构造函数的继承
- 构造函数的继承
- 构造函数的继承(非构造函数的继承)
- 构造函数的继承问题
- 继承下的构造函数
- 构造函数的继承问题
- Java构造函数的继承
- javascript 构造函数的继承
- C++构造函数的继承
- 构造函数的继承_C#
- Java 构造函数的“继承”
- 构造函数的继承【试题】
- java构造函数的继承
- PHP构造函数的继承
- 魔术师发牌问题
- C#WPF应用程序学习杂记
- 用JavaScript实现冒泡排序
- 虚拟示波器要点
- java生成excel和读取excel例子
- 继承的构造函数
- 系统
- android:layout_width与android:with的区别
- 正则表达式
- Android Studio基本设置与运行
- 总结过去10年的程序员生涯(转自网友)
- 非常好的Java反射例子
- 黑马程序员------------------------------------------------C语言易忘基本知识点二
- 基于MPU-9150和Arduino的上肢姿态检测系统设计