更新文件 Cpp_默认构造方法.md
This commit is contained in:
parent
2481470c44
commit
fccd0111a3
|
@ -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();
|
||||
}
|
||||
```
|
||||
|
||||
当类中含有不能默认拷贝成员变量时,可以禁止默认构造函数的生成,
|
||||
|
|
Loading…
Reference in New Issue