【问题标题】:Why does copy constructor hide the default constructor in C++?为什么复制构造函数会隐藏 C++ 中的默认构造函数?
【发布时间】:2010-11-26 22:48:58
【问题描述】:
#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()' 没有匹配的函数 为什么?

【问题讨论】:

  • 这不能解决您的问题,但理想情况下,您的复制构造函数应该采用 const 引用。

标签: c++


【解决方案1】:

只有在你没有声明任何构造函数时才会生成默认构造函数。假设如果您要定义自己的构造函数,那么您还可以决定是否需要无参数构造函数,如果需要,也可以定义。

在 C++0x 中,将有一个明确的语法表示您需要默认构造函数:

struct Foo {
    Foo() = default;
    ... other constructors ...
};

【讨论】:

    【解决方案2】:

    它不会隐藏默认构造函数,但在你的类中声明任何构造函数都会阻止编译器生成默认构造函数,其中 any 包含复制构造函数。

    如果存在任何其他构造函数,则禁止生成默认构造函数的基本原理是基于这样一种假设:如果您在一种情况下需要特殊初始化,那么隐式生成的默认构造函数很可能是不合适的。

    【讨论】:

      猜你喜欢
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 2018-02-24
      相关资源
      最近更新 更多