继承方法,派生方法不调用基础

时间:2013-11-02 15:33:02

标签: c++ inheritance polymorphism

我有A类和B类,例如这是代码

class A{
void show(){.....}}

class B:public A{
void show(){....}}

void main()
{ int arr[2];
arr[0]=new A();
arr[1]=new B();
arr[1]->show();
}

在这种情况下,我希望B级的表演能够采取行动,但不管我做了什么,总是去看看父母的“表演”......

我该怎么办?

1 个答案:

答案 0 :(得分:1)

您必须在基类中将其设为virtual方法,在您的情况下,数组也应为A*而不是int。然后这两点将解决您的问题:

struct A
{
    virtual void show() {}
  //^^^^^^^
};

struct B : public A
{
    void show() {}
    /* virtual void show() override {} */
};

int main()
{
    A *arr[2];
    arr[0] = new A;
    arr[1] = new B;

    arr[1]->show();
}

最后一句话,避免使用裸指针,您可以使用智能指针,例如unique_ptrshared_ptr

struct A
{
    virtual void show() {};
};

struct B : public A
{
    void show() {}
    /* virtual void show() override {} */
};

int main()
{
    unique_ptr<A> arr[2];

    arr[0].reset(new A);
    arr[1].reset(new B);

    arr[1]->show();
}