2011-11-23 50 views
4

的重載函數我嘗試做一些像使用基類

class base { 
public: 
    virtual double operator() (double val) = 0; 
    virtual double operator() (double prev, double val) { 
     return prev + operator()(val); 
    } 
}; 

class derived: public base { 
    virtual double operator() (double val) { 
     return someting_clever; 
    } 
}; 

我想重載運算符()與不同的算法,如std使用::積累或std ::變換。我完全滿意operator()(double,double)的基類定義。但是我無法從派生類中調用它。我是否必須爲每個從基類派生的類重寫相同的代碼?

+0

我想您所遇到的同樣的問題http://stackoverflow.com/questions/ 746391 /從一類與操作符重載 –

回答

6

這裏的問題是,在派生類中定義一個函數會在基類中隱藏相同的函數;這就是爲什麼你不能從派生類訪問operator()(double, double)的原因。

但是有一個辦法做到這一點:你可以使用一個using指令在派生類中:

class derived: public base { 
    using base::operator(); 
    virtual double operator() (double val) { 
     return someting_clever; 
    } 
}; 
+0

是的,這是做這項工作。乾杯。 – Michael

3

您是否嘗試過使用指令?

class derived: public base { 
    virtual double operator() (double val) { 
     return someting_clever; 
    } 
    using base::operator(); 
}; 
+0

謝謝,這個作品 – Michael