2014-06-29 68 views
-3

嗨,我特林創造這樣的基本數據類型的包裝類,但我被困在這個問題上:運營商在純虛類重載

當我嘗試創建界面,能夠使用基因多態性與後代

編輯

我越來越

function returning abstract class "Var" is not allowed: 
function "Var::operator+" is a pure virtual 
function function "Var::operator-" is a pure virtual function 
function "Var::operator*" is a pure virtual function 
function "Var::operator/" is a pure virtual function 

這裏是我的代碼

class Var 
{ 

public: 
    Var() { } 
    virtual Var operator+(Var b) = 0; 
    virtual Var operator-(Var b) = 0; 
    virtual Var operator*(Var b) = 0; 
    virtual Var operator/(Var b) = 0; 
}; 

class Decimal : public Var 
{ 

public: 
    Decimal(double a) { value = a; } 
    Decimal() : Decimal(0) { }; 
    virtual Decimal operator+(Decimal b) 
    { 
     return value + b.value; 
    } 
    virtual Decimal operator-(Decimal b) 
    { 
     return value - b.value; 
    } 
    virtual Decimal operator*(Decimal b) 
    { 
     return value * b.value; 
    } 
    virtual Decimal operator/(Decimal b) 
    { 
     return value/b.value; 
    } 
    Decimal operator=(double val) 
    { 
     value = val; 
    } 

private: 
    double value; 
}; 

我的問題的任何解決方案?

+3

「噸的錯誤」沒有幫助你想幫助你的人。 – chris

+1

爲了覆蓋基類的函數,成員函數必須完全匹配參數列表並且具有協變返回類型。 – dyp

+1

此外,'value + b.value'等等產生一個'Var',但是你的返回類型(當前)是一個'Decimal',所以必須有一個從'Var'到'Decimal'的轉換添加一個是一個相當糟糕的主意)。 – dyp

回答

1

我認爲你正在做這個錯誤的方式。嘗試一個模板

template<class T> 
class Var 
{ 
public: 
    typedef T Type; 

    Var(const Type& value = Type()) : value(value) {} 

    friend Var operator+(const Var& left, const Var& right) 
    { 
     return Var(left.value + right.value); 
    } 

private: 
    Type value; 
};