派生类中的虚函数行为

时间:2019-07-23 05:04:37

标签: c++

我可以在基类中使用virtual函数吗,我的某些派生类确实具有该函数,而有些则没有。

class A{
   virtual void  Dosomething();
};

class B : public A{
   void  Dosomething();
};

class C : public A{
  //Does not have Dosomething() function.
};

3 个答案:

答案 0 :(得分:1)

派生类不必实现所有虚函数,除非它是纯虚函数。即使在这种情况下,也只有在您尝试实例化派生类(而不实现纯虚拟函数)时,才会导致错误。

colorBlindBlack8  <- c("#000000", "#E69F00", "#56B4E9", "#009E73", 
                       "#F0E442", "#0072B2", "#D55E00", "#CC79A7")
pie(rep(1, 8), col = colorBlindBlack8)

答案 1 :(得分:1)

我认为您可能获得的最接近的结果是,在派生类中更改access修饰符,如下所示。

但是,我认为这是不好的做法,因为它违反了Liskov的替代原则。

如果遇到这种情况,则可能需要重新考虑类设计。

  var fenway = {lat: 42.345573, lng: -71.098326};
  var panorama = new google.maps.StreetViewPanorama(
      document.getElementById('pano'), {
        position: fenway,
        pov: {
          heading: 160,
          pitch: 10
        },
        clickToGo : false,
        panControl: false
      });

答案 2 :(得分:1)

摘自我的一本c ++教科书:

  

一旦一个函数被声明为虚函数,即使在派生类重写该函数时未将其显式声明为虚函数,该函数也始终在继承过程中保持虚状态。   当派生类选择不覆盖它时,它仅继承其基类的虚函数。

因此,您的问题的答案是否。c类将使用A类的虚函数。