运营商=并复制c'tor

时间:2013-06-07 12:38:49

标签: c++

B j
A i = j

而B来自A. 我的问题是: 会叫什么c'tors? A的默认c'tor然后A的运算符=或A的副本c'tor? 谢谢!

2 个答案:

答案 0 :(得分:1)

复制构造函数,因为它是初始化,而不是赋值。

从标准C ++ 98 12.8 [class.copy] p1:

  

通过初始化(12.1,可以通过两种方式复制类对象)   8.5),包括函数参数传递(5.2.2)和函数值返回(6.6.3),以及赋值(5.17)。从概念上讲,这些   两个操作由复制构造函数(12.1)和副本实现   赋值运算符(13.5.3)。

这里的编辑看起来有些含糊不清。可能更好的是C ++ 11的编辑(处理分号):

  

可以通过两种方式复制或移动类对象:通过初始化   (12.1,8.5),包括函数参数传递(5.2.2)和for   函数值返回(6.6.3); 和赋值(5.17)。从概念上讲,   这两个操作由复制/移动构造函数(12.1)实现   和复制/移动赋值运算符(13.5.3)。

答案 1 :(得分:1)

#include <iostream>

using namespace std;

class A
{

public:

    A()
    {
        cout << "(A) default constructor"<< endl;
    }

    A(const A& a)
    {
        cout << "(A) copy constructor" << endl;
    }

    A& operator=(const A& a)
    {
        cout << "(A) operator=" << endl;
    }

};

class B : public A
{

public:

    B()
    {
        cout << "(B) default constructor" << endl;
    }


};

int main()
{

    A a1;
    A a2 = a1;
    A a3(a1);

    cout<<"*******"<<endl;

    B b1;

    cout<<"*******"<<endl;

    B b4;
    A a4 = b4;

    return 0;
}

--output:--
(A) default constructor
(A) copy constructor
(A) copy constructor
*******
(A) default constructor
(B) default constructor
*******
(A) default constructor
(B) default constructor
(A) copy constructor