我有两个简单的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()
?
答案 0 :(得分:5)
您需要做的就是在基类中创建window.Detail = Detail;
csv = CSV.read(csvtoopen, :headers=>true, quote_char: '"', encoding: "bom|utf-8")
:
getValue
那个函数在整个类结构中将是virtual
(不需要在子类中重复关键字,尽管有些人为了清晰起见而这样做。)
与Java不同,virtual double getValue(void) { return a ; }
- ness不是自动的。
答案 1 :(得分:2)
将基本方法标记为虚拟,将衍生方法标记为覆盖:
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 ; }
};