-4
B j
A i = j

而 B 是从 A 派生的。我的问题是:将调用什么 c'tors?A 的默认 c'tor,然后是 A 的 operator= 或 A 的复制 c'tor?谢谢!

4

2 回答 2

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)和用于函数值返回(6.6.3)并通过分配(5.17)。从概念上讲,这两个操作由复制/移动构造函数 (12.1) 和复制/移动赋值运算符 (13.5.3) 实现。

于 2013-06-07T12:54:24.373 回答
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
于 2013-06-07T13:22:58.540 回答