【问题标题】:Initialisation, Copy constructor and assignment初始化、复制构造函数和赋值
【发布时间】:2014-10-28 06:50:46
【问题描述】:

我有一个复杂的类,主要是这样的:

int main()
{
complex c1;
complex c2=c1;
complex c3(c1);
complex c4;
c4=c1;
}

在复杂类中我需要哪些构造函数才能使所有这些语句正常工作? 并且,重载的赋值或复制构造函数会用在下面吗:

complex c2=c1;
complex c3(c1);

【问题讨论】:

    标签: c++ constructor operator-overloading


    【解决方案1】:
    complex c1;
    

    默认c-tor。

    complex c2=c1;
    

    复制 c-tor。

    complex c3(c1);
    

    复制 c-tor。

    complex c4;
    

    默认c-tor。

    c4=c1;
    

    赋值运算符。

    默认构造函数由编译器定义,如果你没有定义其他构造函数(或者你可以定义没有参数的构造函数)。

    复制构造函数和赋值运算符由编译器定义,如果你不定义。

    【讨论】:

    • c2 是否可以访问赋值运算符,还是只能访问“complex c5 = complex()”?
    • @Andre 仅适用于 c4。您使用 c5 的示例是复制构造函数。
    【解决方案2】:

    您的问题的一个很好的匹配答案以及有关该主题的更多信息如下: http://www.gotw.ca/gotw/001.htmhttp://herbsutter.com/2013/05/09/gotw-1-solution

    【讨论】:

      【解决方案3】:

      从现有对象创建新对象时调用复制构造函数,作为现有对象的副本。当一个已经初始化的对象从另一个现有对象分配一个新值时,就会调用赋值运算符。

      c4 = c1;  // calls assignment operator, same as "c4.operator=(c1);"
      complex c2 = c1;  // calls copy constructor, same as "complex c2(c1);"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-12
        相关资源
        最近更新 更多