Я знаю немного полиморфизма, но я немного потерял здесь, на неявном из B
в A
метод из B
называется, но с явным методом из 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
не запрещен, или просто потому, что мало значения запрещенных бессмысленных вещей?
Итак ... в чем вопрос? – Yaniv