2013-02-25 100 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