我有A类和B类,比如这是在这种情况下,我想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();
}
,但没有问题我做了什么总是去父母的'秀'..
我该怎么办?
我有A类和B类,比如这是在这种情况下,我想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();
}
,但没有问题我做了什么总是去父母的'秀'..
我该怎么办?
您必须使其在基类中为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();
}
您需要将B的show()方法标记为虚拟并覆盖。 –
@MikeWoolf:你的意思是我应该为'B :: show'写'virtual'吗?标准中的每个§10.3/ 1是没有必要的,你可以忽略它。顺便说一句,在派生类上重复它是一个很好的习惯,我将它作为评论放在答案中。 – deepmax
确定'arr'有输入'int'? – simonc