1
考慮下面的代碼: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 =不?
好的,據我所知,編譯器會生成對於B以下代碼: B&運算符=(常數B&B) { A ::運算符=(B); return * this; } 但是如果我們有虛擬的「A :: operator =」,那麼應該調用「B :: operator =」,因爲它覆蓋了「A :: operator =」。 但事實並非如此。 – drinian 2010-12-06 14:00:58