B j
A i = j
而 B 是从 A 派生的。我的问题是:将调用什么 c'tors?A 的默认 c'tor,然后是 A 的 operator= 或 A 的复制 c'tor?谢谢!
B j
A i = j
而 B 是从 A 派生的。我的问题是:将调用什么 c'tors?A 的默认 c'tor,然后是 A 的 operator= 或 A 的复制 c'tor?谢谢!
复制构造函数,因为是初始化,而不是赋值。
从标准 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) 实现。
#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