多态、虚方法、C++

polymorphism, virtual methods, C++

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;

liste 的内存可能已分配,A::a 和 C::c 正在保存值。现在,如果我将 c 放入 D::liste[0] 并用

给出
cout << d.liste[0].getV();

它打印 A::a。为什么它不打印出 C::c 尽管我声明 A::getV() 为虚拟?

C++ 多态性仅适用于指针和引用。 liste[0] 的类型为 A,而不是 A*A&,因此实际上不会调度 liste[0].getV() 调用。它只是调用 A::getV().

我是这样写程序的,得到了​​预期的正确结果

#include <iostream>
using namespace std;

class A
{
 private:
    int a;
 public:
    virtual int getV() { cout<<"A";return a; }
};

class C : public A
{
 private:
 int c;
 public:
   virtual int getV() { cout<<"C";return c; }
};

class D
{
  public:
    A* liste[2];
};

int main()
{
  D d;
  d.liste[0]=new C();
  d.liste[1]=new A();
  cout<<d.liste[0]->getV();      
  return 0;
}

随便看看..