наследование — Как работает оператор по умолчанию = в C ++?

У меня были трудные времена, пытаясь понять, как конструктор копирования по умолчанию и оператор по умолчанию = работают в 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

Решение

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)

Снизу вверх: 3 2 9 4 и ваш последний 4.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector