多态性,虚方法,C ++

LPrc
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。尽管我将A :: getV()声明为虚拟的,但为什么它却没有打印出C :: c?

克拉斯科维奇

C ++多态仅适用于指针和引用。liste[0]具有类型A,而不是A*A&,因此liste[0].getV()不会虚拟调度呼叫。它只是打电话A::getV()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章