专业编程基础技术教程

网站首页 > 基础教程 正文

C++11:继承构造函数 cpp继承构造函数

ccvgpt 2024-10-10 05:03:36 基础教程 10 ℃

C++11 引入了一个非常有用的特性,即允许派生类通过继承基类的构造函数来初始化基类部分。这可以通过在派生类的构造函数初始化列表中使用 using 声明来实现。

下面是一个简单的例子来说明这个特性:

C++11:继承构造函数 cpp继承构造函数

#include <iostream>  
  
class Base {  
public:  
    Base(int a) : value(a) {}  
    Base(double b) : value(static_cast<int>(b)) {}  
    void print() const { std::cout << "Base value: " << value << std::endl; }  
  
private:  
    int value;  
};  
  
class Derived : public Base {  
public:  
    using Base::Base;  // 继承所有基类的构造函数  
  
    void printMore() const { std::cout << "Derived doing something else." << std::endl; }  
};  
  
int main() {  
    Derived d1(10);    // 使用继承的 Base(int) 构造函数  
    d1.print();       // 输出 "Base value: 10"  
    d1.printMore();   // 输出 "Derived doing something else."  
  
    Derived d2(3.14); // 使用继承的 Base(double) 构造函数  
    d2.print();       // 输出 "Base value: 3"  
    d2.printMore();   // 输出 "Derived doing something else."  
  
    return 0;  
}

在这个例子中,Derived 类通过 using Base::Base; 声明继承了 Base 类的所有构造函数。这样,Derived 类就可以像直接使用 Base 类的构造函数一样来初始化其基类部分。

注意

  1. using 声明只能出现在类定义中。
  2. 如果基类有多个构造函数,并且派生类想要继承其中一些而不是全部,那么可以使用多个 using 声明来分别继承。
  3. 继承的构造函数不会覆盖派生类中的同名构造函数。如果派生类定义了与基类同名的构造函数,那么派生类的构造函数将优先于继承的构造函数。
  4. 继承的构造函数不会参与重载解析。也就是说,如果派生类定义了一个与继承的构造函数签名相同的构造函数,那么继承的构造函数将不会被考虑。

这个特性可以简化代码,避免在派生类中重复编写与基类相似的构造函数。

最近发表
标签列表