2013-02-25 94 views
0

我有兩個班。運算符重載 - 如何更改對象的位置?

Inch class: 

class Inch{ 
private: 
    double inches; 

public: 
    Inch() : inches(0) {} 
    Inch(double i) { inches=i; } 
    Inch operator+ (const Meter& m); 
    void out(){ cout << "Inch:" << inches << "\n"; } 
    double getInches() const { return inches; } 
}; 

和儀表類

class Meter{ 
private: 
    double meter; 

public: 
    Meter() : meter(0) {} 
    Meter(double m) { meter=m; } 
    Meter operator+ (const Inch& i); 
    void out(){ cout << "Meter:" << meter; } 
    double getMeter() const { return meter; } 
}; 

這是兩個非內嵌運營商+功能

Meter Meter :: operator+ (const Inch& i){ 
    { return Meter(meter/0.0254 + i.getInches()); } 
} 

Inch Inch :: operator+ (const Meter& m){ 
    { return Inch(m.getMeter() + inches * 0.0254); } 
} 

這是我的主要和編譯。這裏沒有問題。

int main() { 

    Inch i(6.4), 
     resultInch; 

    Meter m(14), 
     resultMeter; 


    i.out(); 
    m.out(); 


resultMeter = m + i; 
    resultMeter.out(); 

    resultInch = i + m; 
      resultInch.out(); 


    return 0; 
} 

我想要做的是改變的是我在

resultInch = i + m; 
     resultInch.out(); 

我想+ M的地方加入這兩個像

resultInch = m + i; 
      resultInch.out(); 

我怎樣才能做到這一點?

+0

那麼你應該使雙方返回'Inch'。在我看來,讓'inch + metre'返回'Inch'和'meter + inch'返回一個'Metre'是沒有意義的。 – chris 2013-02-25 20:50:08

回答

2

添加轉換構造函數:

Inch(Meter const & m) : inches(m.getMeter() * 100.0/2.54) { } 

Meter(Inch const & i) : meters(i.getInches() * 2.54/100.0) { } 
+1

可能需要在那裏的轉換工作:) – cppguy 2013-02-25 20:51:26

+0

當我把這些我得到這個錯誤:沒有匹配的'運營商*'在'我* 2.54000000000000003552713678800500929355621337890625e + 0'和同樣的錯誤與儀表 – abc 2013-02-25 20:54:09

+0

14.1626應該是正確回答米數。但結果是21952爲什麼.d – abc 2013-02-25 21:05:35

0

可以使全球的加法運算符是需要2個參數

Inch operator+(const Meter& m, const Inch& i) 
+0

我得到的錯誤必須採取0或1參數錯誤 – abc 2013-02-25 21:11:10

+1

@mertmetin:他說一個*全局*添加運算符,不是一個成員函數。 – 2013-02-25 21:30:25