#include <iostream>
#include <conio.h>
using namespace std;
class Base
{
int a;
public:
Base(const Base & b)
{
cout<<"inside constructor"<<endl;
}
};
int main()
{
Base b1;
getch();
return 0;
}
这会出错。调用`Base :: Base()'没有匹配函数 为什么呢?
答案 0 :(得分:9)
只有在未声明任何构造函数时,才会生成默认构造函数。假设你定义了自己的构造函数,那么你也可以决定是否需要一个no-args构造函数,如果是这样也定义它。
在C ++ 0x中,会有一个明确的语法来表示你想要默认的构造函数:
struct Foo {
Foo() = default;
... other constructors ...
};
答案 1 :(得分:7)
它不隐藏默认构造函数,但声明类中的任何构造函数会禁止编译器生成默认构造函数,其中任何包含复制构造函数。
如果存在任何其他构造函数,则禁止生成默认构造函数的基本原理基于以下假设:如果在一种情况下需要特殊初始化,则隐式生成的默认构造函数很可能是不合适的。