2013-11-02 73 views
0

我有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(); 
} 

,但没有问题我做了什么总是去父母的'秀'..

我该怎么办?

+0

确定'arr'有输入'int'? – simonc

回答

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(); 
} 
+0

您需要将B的show()方法标记为虚拟并覆盖。 –

+0

@MikeWoolf:你的意思是我应该为'B :: show'写'virtual'吗?标准中的每个§10.3/ 1是没有必要的,你可以忽略它。顺便说一句,在派生类上重复它是一个很好的习惯,我将它作为评论放在答案中。 – deepmax