c++ 11构造函数
时间: 2023-12-22 16:27:13 浏览: 30
C++11引入了继承构造函数的概念,可以通过使用`using`关键字来继承基类的构造函数。这样可以避免在派生类中重复定义基类的构造函数,提高了代码的可读性和可维护性。
下面是一个使用继承构造函数的例子:
```c++
class Base {
public:
Base(int v) :_value(v), _c('0'){}
Base(char c): _value(0), _c(c){}
private:
int _value;
char _c;
};
class Derived: public Base {
public:
// 使用继承构造函数
using Base::Base;
// 假设派生类只是添加了一个普通的函数
void display() {
// do something
}
};
```
在上面的例子中,`Derived`类继承了`Base`类的构造函数,使用`using Base::Base`语句来声明继承基类的构造函数。这样,在创建`Derived`类对象时,就可以使用`Base`类的构造函数来初始化`Derived`类的成员变量。
相关问题
c++ 11 默认构造函数
C++11引入了一种新的类内初始值语法,它允许在声明类的同时为数据成员提供默认值。这种语法可以用于任何数据成员,包括静态常量数据成员和非静态数据成员。当使用类内初始值时,编译器会自动为类生成一个默认构造函数,该构造函数将使用类内初始值来初始化数据成员。如果没有提供类内初始值,则默认构造函数将执行默认初始化(即不执行任何初始化)。
以下是一个使用类内初始值和默认构造函数的示例:
```c++
#include <iostream>
using namespace std;
class MyClass {
public:
int x = 0; // 使用类内初始值
int y; // 没有类内初始值
MyClass() = default; // 显式声明默认构造函数
};
int main() {
MyClass obj;
cout << "x = " << obj.x << endl; // 输出:x = 0
cout << "y = " << obj.y << endl; // 输出:y = 0
return 0;
}
```
在上面的示例中,MyClass类使用了类内初始值来初始化x数据成员,而y数据成员没有使用类内初始值。MyClass类还显式声明了一个默认构造函数,该构造函数将使用类内初始值来初始化数据成员。
c++ 子类构造函数
当子类继承父类时,对于子类的构造函数的写法有一定的规律。如果父类有显式地声明了构造函数,子类最低限度需要实现父类中的一个构造函数。如果父类没有声明构造函数,子类可以选择不声明构造函数或者任意地书写构造函数。
当一个类中存在多个构造函数时,系统会自动选出匹配的构造函数。在子类中声明构造函数时,可以选择任意形式。在创建子类对象时,首先会调用父类默认的构造函数(编译器自动生成),然后调用子类的构造函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [c++ 子类构造函数初始化及父类构造初始化](https://blog.csdn.net/weixin_30619101/article/details/95982933)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* [c++ 类的构造函数及子类的构造函数](https://blog.csdn.net/wybnmsl/article/details/104175475)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]