我知道有點多態的,但我用隱參考位丟在這裏,在隱式轉換從B
到A
從B
調用該方法,但有明確從A
方法被調用,這是有道理的,但它只在這些方法是虛擬的情況下才起作用,否則在兩種情況下都會輸入ShowA
(調用類A
的方法)。顯式轉換VS虛函數
class A
{
public:
A(){};
~A(){}
public:
int n;
virtual void Show(){ cout << "ShowA" << endl; };
};
class B : public A
{
public:
B(){};
~B(){}
virtual void Show() { cout << "ShowB" << endl; }
};
int _tmain(int argc, _TCHAR* argv[])
{
B b;
A& a = b; //ShowB
A& a = (A)b; //ShowA
a.Show();
//Extra:
A& extra = extra;
return 0;
}
另外有爲什麼A& extra = extra
並不被禁止,或者僅僅是因爲要禁止毫無意義的事情不太重要的一個原因?
這樣的合法聲明會是相當複雜的所以......問題是什麼? – Yaniv 2013-03-04 01:28:03