0

我有 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 班的表演能够采取行动,但无论我做什么,它总是去父母的“表演”。

我能做些什么?

4

1 回答 1

1

您必须将其virtual设为基类中的方法,在您的情况下,数组也应为A*not 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_ptror shared_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();
}
于 2013-11-02T15:34:38.853 回答