我确实知道一点多态性,但在这里我有点迷失了,关于隐式转换 fromB
到A
方法 fromB
被调用,但显式调用方法 from A
,这是有道理的,但它只有在这种情况下才有效方法是虚拟的,否则在这两种情况下ShowA
都是输入(A
调用类中的方法)。
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
的,还是仅仅因为禁止无意义的事情不重要?