c ++虚函数重新实现

时间:2011-05-25 22:26:19

标签: c++ oop function virtual

甚至我认为这个问题很愚蠢。但我有一点经验。

我有一个具有这种方法的基类:

class A{  virtual void func(int)=0 };

和继承的课程

    class  B :public A
  {  
     //how should i write?
    //a  
       virtual void func() {    implementation...}  

    //b
      void func() {implementation    } 
   //my target is to redefine a function of ansestor
 //i worry that variant b can  cover ansestor function and i will not redefine it
 //but what if i don't want that the function that was virtual in ansestor, will   be      virtual in subclass? 
i'm confused
}

我不知道该怎么做。如果我不需要这个虚函数完成

4 个答案:

答案 0 :(得分:4)

你问,“如果我不希望在ansestor中虚拟的函数在子类中是虚拟的,那该怎么办?”

很抱歉,但是在基类中声明为virtual的每个函数在所有派生类中都是虚拟的。

在派生类声明中使用virtual关键字实际上并不重要。选项a和b是相同的 - 在两种情况下B::func都是虚拟的。

答案 1 :(得分:2)

我建议你写两个小程序,每个程序一个,以确定哪个适合你的需要。

答案 2 :(得分:1)

在C ++中,函数签名由函数名和函数参数组成。在一个类中,您不能拥有两个具有相同签名的函数。因此,您的第二个(非虚拟)函数声明将生成编译器错误。

简而言之:

virtual void func() { //implementation}

void func() { //implementation }

具有相同的签名,不能在同一个类中声明。

答案 3 :(得分:1)

虚拟意味着可以在继承的类中实现。无论继承的深度如何,虚函数总是虚拟的。