Рассмотрим следующий код:C++ оператор присваивания решения
struct A
{
void foo(const char *) { cout << __PRETTY_FUNCTION__ << endl; }
A & operator = (const A & ) { cout << __PRETTY_FUNCTION__ << endl; return * this; }
};
struct B : public A
{
void foo(const char *) { cout << __PRETTY_FUNCTION__ << endl; }
A & operator = (const A & other) { cout << __PRETTY_FUNCTION__ << endl; return * this; }
};
Тогда, когда мы называем это члены:
B b;
b.foo("hehe");
b = b;
будут напечатаны:
void B::foo(const char *)
A& A::operator=(const A&)
Вопрос: почему B :: foo скрывает A :: foo, но B :: operator = does not?
Хорошо, как я понимаю, компилятор генерирует следующий код для B: B & оператора = (B & Const б) { A :: = оператор (б); возвращение * это; } Но если у нас есть виртуальный «A :: operator =», тогда вызывается «B :: operator =», потому что он переопределяет «A :: operator =». Но это не так. – drinian 2010-12-06 14:00:58