Вот код, который я не понимаю:
class Base
{
public:
Base(){}
Base operator=(Base ob2)
{
std::cout << "Using Base operator=() " << '\n';
return *this;
}
};
class Derived : public Base
{
public:
Derived(){}
Derived operator=(Base ob2)
{
std::cout << "Using Derived operator=() " << '\n';
return *this;
}
};
int main()
{
Derived derived1, derived2;
Base base1;
derived1 = derived2; // Uses base operator=()
derived1 = base1; // Uses derived operator=()
return 0;
}
Каковы языковые правила, которые определяют, что первое присваивание использует оператор базового класса, а второй оператор класса Derived?
Да, и я знаю, что обычно не объявляет оператора присваивания, как это. Вот почему я назвал его академическим.