C++-继承构造

继承构造

在传统 C++ 中,构造函数如果需要继承是需要将参数一一传递的,这将导致效率低下。C++11 利用关键字 using 引入了继承构造函数的概念

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Base 
{
public:
int value1;
int value2;
Base()
{
value1 = 1;
}
Base(int value) : Base()
{ // 委托Base()构造函数
value2 = value;
}
};
class Subclass : public Base {
public:
using Base::Base; //继承构造
};
int main() {
Subclass s(3);
std::cout << s.value1 << std::endl; //1
std::cout << s.value2 << std::endl; //3
}

注意事项

  1. 继承构造函数无法初始化派生类数据成员
  2. 构造函数拥有默认值会产生多个构造函数版本,且继承构造函数无法继承基类构造函数的默认参数
  3. 多继承的情况下,继承构造函数会出现“冲突”的情况,因为多继承下函数签名可能会冲突。