Производные классы косвенно наследуют оператор присваивания базы?
Я пытаюсь понять это поведение, но, похоже, не понимаю. Пожалуйста, посмотрите этот код:
#include <iostream>
using namespace std;
class Base
{
public:
void operator=(const Base& rf)
{
cout << "base operator=" << endl;
this->y = rf.y;
}
int y;
Base() : y(100) { }
};
class Derived : public Base
{
public:
int x;
Derived() : x(100) { }
};
int main()
{
Derived test;
Derived test2;
test2.x = 0;
test2.y = 0;
test.operator=(test2); // operator auto-generated for derived class but...
cout << test.x << endl << test.y << endl;
cin.ignore();
return 0;
}
ПРОГРАММНЫЙ ВЫХОД:
> base operator=
> 0
> 0
Теперь я в замешательстве: правило гласит, что производный класс никогда не наследует оператор присвоения, а создает собственныйoperator=
Однако в этом примере базыoperator=
вызывается в производном классе.
Во-вторых, я смог явно вызвать оператор присвоения для производного класса, который, в свою очередь, явно не определен в производном классе.
Теперь, если я правильно понимаю, это означает, что любой оператор определенной пользователем базы всегда вызывается в производном классе?