B j
A i = j
而B来自A. 我的问题是: 会叫什么c'tors? A的默认c'tor然后A的运算符=或A的副本c'tor? 谢谢!
答案 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