网站首页 > 基础教程 正文
C++11 引入了一个非常有用的特性,即允许派生类通过继承基类的构造函数来初始化基类部分。这可以通过在派生类的构造函数初始化列表中使用 using 声明来实现。
下面是一个简单的例子来说明这个特性:
#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 类的构造函数一样来初始化其基类部分。
注意:
- using 声明只能出现在类定义中。
- 如果基类有多个构造函数,并且派生类想要继承其中一些而不是全部,那么可以使用多个 using 声明来分别继承。
- 继承的构造函数不会覆盖派生类中的同名构造函数。如果派生类定义了与基类同名的构造函数,那么派生类的构造函数将优先于继承的构造函数。
- 继承的构造函数不会参与重载解析。也就是说,如果派生类定义了一个与继承的构造函数签名相同的构造函数,那么继承的构造函数将不会被考虑。
这个特性可以简化代码,避免在派生类中重复编写与基类相似的构造函数。
猜你喜欢
- 2024-10-10 C++系列1-1:初探C++ c=2μf
- 2024-10-10 浅谈C++11(第9篇 可变参数模板) c++可变参数模板类
- 2024-10-10 数组的初始化方式有哪几种? 数组的初始化是什么意思
- 2024-10-10 c++对于内建类型的默认初始化 创建内部类的对象
- 2024-10-10 C++类构造函数,如何初始化对象?linux C++第27讲
- 2024-10-10 【C++编程语言】之 类和对象——对象的初始和消除
- 2024-10-10 C++基础语法梳理:引用、封装、继承和多态
- 2024-10-10 C++核心准则?:按照成员声明的顺序定义和初始化成员变量
- 2024-10-10 C++核心准则C.47:按照成员变量声明的次序定义和初始化数据成员
- 2024-10-10 C/C++语言编程系列002——不同情况下数组的初始化方法
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)