我有 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 班的表演能够采取行动,但无论我做什么,它总是去父母的“表演”。
我能做些什么?
我有 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 班的表演能够采取行动,但无论我做什么,它总是去父母的“表演”。
我能做些什么?
您必须将其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_ptr
or 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();
}