在C++中扩展操作员过载
extending operator overload in C++
我对C++相当陌生(我一生都在C语言中度过,所以我认为是时候花一些时间来学习一门新语言,以丰富我的知识:))。我有一个名为"Rational"的类,我有它的所有特定函数,用于getter,setter,constructor等(这里无关紧要)。有趣的是,当我尝试重载 +,-,,/运算符时。我能够在两个理性对象之间成功地做到这一点,例如理性 a(1,5)、b(5,5)、c;c = a + b;所以这一切都很好。现在我正在尝试通过在 Rational 和整数之间 +,-,,/来升级我的类,例如 2 + a、10 - b 等。以下是我在 Rationals 之间重载的代码片段:
Rational.cc
...
Rational Rational::operator+(Rational B) {
int Num;
int Den;
Num = p * B.q + q * B.p;
Den = q * B.q;
Rational C(Num, Den);
C.simplifierFraction();
return C;
}
Rational Rational::operator-(Rational B) {
int Num;
int Den;
Num = p * B.q - q * B.p;
Den = q * B.q;
Rational C(Num, Den);
C.simplifierFraction();
return C;
}
Rational Rational::operator*(Rational B)
{
int Num;
int Den;
Num = p * B.p;
Den = q * B.q;
Rational C(Num, Den);
C.simplifierFraction();
return C;
}
Rational Rational::operator/(Rational B)
{
int Num;
int Den;
Rational invB = inverse(B);
Num = p * invB.p;
Den = q * invB.q;
Rational C(Num, Den);
C.simplifierFraction();
return C;
}
...
理性.h
Rational operator+(Rational B);
Rational operator-(Rational B);
Rational operator*(Rational B);
Rational operator/(Rational B);
private:
int p;
int q;
protected:
TestRat.cc
int main() {
...
const Rational demi(1,2);
const Rational tiers(1,3);
const Rational quart(1,4);
r0 = demi + tiers - quart;
r1 = 1 + demi;
r2 = 2 - tiers;
r3 = 3 * quart;
r4 = 1 / r0;
...
因此,当我尝试运行 TestRat.cc 时,它说:
testrat.cc:31: error: no match for ‘operator+’ in ‘1 + r9’
testrat.cc:52: error: passing ‘const Rational’ as ‘this’ argument of ‘Rational Rational::operator+(Rational)’ discards qualifiers
testrat.cc:53: error: no match for ‘operator+’ in ‘1 + demi’
testrat.cc:54: error: no match for ‘operator-’ in ‘2 - tiers’
testrat.cc:55: error: no match for ‘operator*’ in ‘3 * quart’
testrat.cc:56: error: no match for ‘operator/’ in ‘1 / r0’
我必须做什么才能完成这项工作?谢谢!
tl;dr:
您的运算符应声明为:
Rational operator+(const Rational& B) const;
井。。。至少这些。 operator =
应该返回对*this
的引用,但这超出了本问题的范围。此外,这些运算符被定义为处理Rational
对象,而
r1 = 1 + demi;
尝试对int
和Rational
对象进行操作。您必须在类外部定义一个适当的运算符:
inline Rational operator+(int, const Rational& r)
{
//...
}
不过,我建议你从一本好书开始学习C++。只是从这里和那里捡东西是行不通的。
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 重载操作程序时出错>>用于类中的字符串 memebr
- 是否可以通过C++扩展强制多个python进程共享同一内存
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 扩展光电二极管探测器以支持多个传感器
- 对字符串进行位操作
- 我可以在 C++ 中的函数体之外进行操作吗?
- MPI突然停止了对多个核心的操作
- <<操作员在下面的行中工作
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 对字符数组中的元素执行逐位操作
- 您可以在C 中使用BOOL和INT操作员执行什么操作
- 为什么C 流操作器没有呼叫操作员
- 在C++中扩展操作员过载
- Python扩展在操作大列表时会创建无效指针
- 是否存在此操作的操作员
- 操作员过载C++;<<操作的参数过多
- 使用按位移位操作对扩展进行签名
- 在python扩展中操作来自SWIG的共享指针