class A;
{
private:
int a;
public:
virtual int getV() { return a; }
} a;
class C : public A;
{
private:
int c;
public:
int getV() { return c; }
} c;
class D
{
public:
A* liste;
} d;
Память для списка может быть выделена и A :: a и C :: c имеют значения. Теперь, если я положил c в D :: liste [0] и выдал егоПолиморфизм, виртуальные методы, C++
cout << d.liste[0].getV();
распечатывает A :: a. Почему он не распечатывает C :: c, хотя я объявил A :: getV() виртуальным?
спасибо! каково было бы лучшее/общее решение этой проблемы? – LPrc
@LPrulzcrossover Если вы хотите иметь полиморфное поведение, вы должны использовать ссылки или указатели. Например, 'A * ptr = & c; ptr-> getV() '; будет печатать 'C :: c'. – kraskevich
Для меня как VS10 express, так и gcc 4.4.7, выполняйте полиморфизм также для массивов. означает: 'ptr [0] .getv()' дает то же значение, что и 'ptr-> getv()'. неясно, в чем проблема. нужно дать полный нерабочий код, но я думаю, он пытался добраться от объекта A до C ... – SHR