更新文件 Cpp_默认构造方法.md

This commit is contained in:
lion187 2019-06-19 16:27:58 +08:00
parent 2481470c44
commit fccd0111a3
1 changed files with 96 additions and 3 deletions

View File

@ -68,11 +68,104 @@ int main()
}
```
C++11中当类中含有不能默认初始化的成员变量时可以禁止默认构造函数的生成
为了避免手动编写空默认构造函数C++11引入了显示默认构造函数的概念从而只需在类的定义中编写空默认构造函数而不需要在实现文件中提供其实现
```cpp
myClass()=delete; //表示删除默认构造函数
myClass()=default; //表示默认存在构造函数
// A.h
#ifndef A_H
#define A_H
class A{
public:
A()=default; //default
A(int ii);
void show()const;
private:
int i;
};
#endif // A_H
```
```cpp
// A.cpp
#include <iostream>
#include "tc.h"
using namespace std;
/*
A::A()
{
// 不必给出其实现
};
*/
A::A(int ii)
{
i=ii;
}
void A::show()const
{
std::cout<<"this is A object!"<<std::endl;
};
int main()
{
A a;
a.show();
}
```
同样的C++还支持显式删除构造函数的概念。例如,你想定义一个类,这个类没有任何的构造函数,并且你也不想让编译器自动生成一个默认的空参数的构造函数,那么你就可以显式地删除默认构造函数。
```cpp
// A.h
#ifndef A_H
#define A_H
class A{
public:
A()=delete; //delete
void show()const;
private:
int i;
};
#endif // A_H
```
```cpp
// A.cpp
#include <iostream>
#include "tc.h"
using namespace std;
/*
A::A()
{
// 不必给出其实现
}
A::A(int ii)
{
i=ii;
}*/
void A::show()const
{
std::cout<<"this is A object!"<<std::endl;
}
int main()
{
A a;
a.show();
}
```
当类中含有不能默认拷贝成员变量时,可以禁止默认构造函数的生成,