gpt4 book ai didi

c++ - 运算符重载 - 不匹配

转载 作者:太空宇宙 更新时间:2023-11-04 14:45:03 25 4
gpt4 key购买 nike

我对运算符重载有点问题。我有两个类(class)。

#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; }
};

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()); }

主要是我有这些类(class)中的每一个。我需要按照以下顺序将它们相加: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();

在上面,resultMeter 保持正确的值,但是当我输入 resultInch 时,编译器给出“错误不匹配 bla bla bla”。

我错过了什么?

最佳答案

问题在于这两个运算符都是代码中完全相同的 + 的重载。您可以使用一个或另一个,但不能在同一程序中同时使用两者。

Inch operator+ (const Meter& m, const Inch& i);
class Meter{
Meter operator+ (const Inch& i);
};

考虑一下如果您有一个 Meter m;Inch i; 并尝试用 m + i 添加它们会发生什么,应该调用哪个运算符实现?

关于c++ - 运算符重载 - 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15074651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com