我有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级的表演能够采取行动,但不管我做了什么,总是去看看父母的“表演”......
我该怎么办?
答案 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_ptr
或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();
}