abc*_*abc 0 c++ operator-overloading
运算符重载有点问题.我有两节课.
#include <iostream>
using namespace std;
class Meter; //Forward declaration
class Inch{
private:
double inches;
public:
Inch() : inches(0) {}
Inch(double i) { inches=i; }
friend Inch operator+ (const Meter& m, const Inch& i);
void out(){ cout << "Inch:" << inches << "\n"; }
double getInches() const { return inches; }
};
Run Code Online (Sandbox Code Playgroud)
和
class Meter{
private:
double meter;
public:
Meter() : meter(0) {}
Meter(double m) { meter=m; }
Meter operator+ (const Inch& i) { return Meter(meter + i.getInches() * 0.0254); }
void out(){ cout << "Meter:" << meter; }
double getMeter() const { return meter; }
};
Inch operator+ (const Meter& m, const Inch& i)
{ return Inch(m.getMeter()/0.0254 + i.getInches()); }
Run Code Online (Sandbox Code Playgroud)
主要是我有这些类中的一个.我需要将它们与顺序一起添加:m + i;所以m必须是第一个对象.为了做到这一点,我使用了友元函数,以便使用两个对象作为参数.
Inch i(6.4), resultInch;
Meter m(14), resultMeter;
i.out();
m.out();
resultMeter = m + i;
resultMeter.out();
resultInch = m + i;
resultInch.out();
Run Code Online (Sandbox Code Playgroud)
有了上面的,resultMeter保持正确的值,但是当我把resultInch编译器给出"错误不匹配bla bla bla".
我错过了什么?
问题是这两个运算符都是+代码完全相同的重载.您可以在同一程序中使用一个或另一个,但不能同时使用两个.
Inch operator+ (const Meter& m, const Inch& i);
class Meter{
Meter operator+ (const Inch& i);
};
Run Code Online (Sandbox Code Playgroud)
考虑如果你有一个Meter m;并且Inch i;你试图添加它们会发生什么m + i,应该调用哪个运算符实现?