默认运算符=如何在C ++中运行?

时间:2018-04-01 16:23:32

标签: c++ inheritance constructor copy-constructor default-copy-constructor

我在尝试理解默认复制构造函数和默认运算符如何在C ++中工作时遇到了一些困难。

在以下计划中,我不明白为什么最后一行c0 = b2; cout <<endl;打印出32944

- 如果定义了,运算符=调用复制构造函数吗?如果不是它的表现如何?在这种情况下,似乎b0在被赋予c0时使用了复制构造函数:

C(const B& x) : B(x), a(1){z=0; cout <<"9";}

- 语句c0 = b2;如何使用A类的运算符=(结果末尾的44)?

#include <iostream>
using namespace std;

class A{
  public:
   A(){x=0; cout << "1";}
   A(int t) {x=t; cout << "2";}
   A(const A& a) {x=a.x; cout << "3";}
   const A& operator=(const A& a) {x=a.x; cout << "4"; return *this;}
  protected:
int x;
};

class B{
  public:
   B(const A& a=A()) : y(a) { cout << "5";}
   B(const A& b, int u){y=b; k=u; cout << "6";}
  protected:
   A y; int k;
};

class C : public B{
  public:
   C(int t=1) {z=t; cout <<"7"; }
   C(A x) : B(x) {z=0; cout <<"8";}
   C(const B& x) : B(x), a(1){z=0; cout <<"9";}
  protected:
   A a; int z;
};

int main(){
   B b2; cout << endl;
   C c0; cout <<endl;
   c0 = b2; cout <<endl;

   return 0; 
}

1 个答案:

答案 0 :(得分:1)

c0 = b2正确打印出32944。

  1. c0 = b2来电c0 = C(b2)y.operator=(4)和a.operator=(4)
  2. C(b2)来电B(b2)A(1)(2)和cout << 9(9)
  3. B(b2)来电A(b2)
  4. A(b2)来电cout << 3(3)
  5. 从下到上:3 2 9 4和你的最后4。