在基类中定义的调用函数

calling function defined in base class

本文关键字:调用 函数 定义 基类      更新时间:2023-10-16

我有两个简单的 c++ 类:

class base {
protected:
  double a ;
public:
  double getValue(void) { return a ; }
  double getValue2(void) { return 2*this->getValue() ; }
} // end class base
class derived : public base {
private:
  double b ;
public:
  double getValue(void) { return a+b ; }
}  // end class derived

然后我打电话

  derived A ;
  A.getValue2() ;

问题是,该方法getValue2()从基类(而不是派生类)调用getValue()的方法。是否可以从派生类调用getValue2()函数getValue(),还是需要在派生类中重新定义getValue2()

需要做的就是在基类中getValue virtual

virtual double getValue(void) { return a ; }

然后,该函数将在整个类结构中virtual(无需在子类中重复关键字,尽管有些人为了清楚起见而这样做)。

与Java不同,virtual-ness不是自动的。

将基方法标记为虚拟方法,将派生方法标记为重写

class base {
protected:
  double a ;
public:
  virtual double getValue(void) { return a ; }
  double getValue2(void) { return 2*this->getValue() ; }
};
class derived : public base {
private:
  double b ;
public:
  double getValue(void) override { return a+b ; }
};