c++ - 如何定义一些可以从(+)运算符的运算符重载范围内访问的函数?
问题描述
我通过使用 C++ 中的运算符重载概念创建了一个代码,通过重载 +(plus) 和 <<(Insertion) 运算符来添加两个有理数,但我无法从运算符重载的范围内访问一个函数+ 运算符。如何从 operator+ 重载的范围内访问 LCM() 函数?
我尝试使用朋友函数从 operator+ 重载函数的范围内访问我的 LCM() 函数,但它不起作用!
#include <iostream>
using namespace std;
class Rational {
private:
int num, den;
public:
int getnum()
{
return this->num;
}
int getden()
{
return this->den;
}
Rational(int num = 0, int den = 0)
{
this->num = num;
this->den = den;
}
int LCM(int a, int b);
friend ostream& operator<<(ostream& out, Rational& r);
friend Rational operator+(Rational x, Rational y);
};
int Rational::LCM(int a, int b)
{
int i = a > b ? a : b;
for (i; i <= a * b; i++) {
if (i % a == 0 && i % b == 0) {
break;
}
}
return i;
}
ostream& operator<<(ostream& out, Rational& r)
{
out << r.getnum() << "/" << r.getden();
return out;
}
Rational operator+(Rational x, Rational y)
{
Rational temp;
int temp1;
int div;
temp1 = LCM(x.den, y.den);
temp.num = (int(temp1 / x.den) * x.num) + (int(temp1 / y.den) * y.num);
temp.den = temp1;
return temp;
}
int main()
{
Rational r1(3, 2);
Rational r2(9, 4);
Rational r3;
r3 = r1 + r2;
cout << r3;
return 0;
}
我得到了错误:
错误:未在此范围内声明“LCM”
解决方案
我想说这int Rational::LCM(int a,int b)
与类没有任何关系,Rational
应该是一个实用函数(非成员函数),然后你就可以在任何地方使用它
推荐阅读
- r - R:如何将每 5 行的选择转换为单行?
- jdbc - 无法通过 NetBeans 11 IDE 访问 Derby 数据库(“找不到合适的驱动程序”)
- javascript - 如何通过新模块中的 javascript 控制现有 Odoo 模块的字段。我不想修改现有模块
- go - 按顺序同时执行作业
- excel - 为什么用户表单搜索代码仅在 sheet2 处于活动状态时才有效?
- go - 尝试安装 gonum 时如何处理“不允许导入循环”?
- javascript - 用户允许定位后刷新页面
- sql - 为什么 PRINT 会影响@@rowcount
- python - Python bigquery API 中的 SQL 查询中出现“意外的字符串文字”错误
- java - 面板的背景颜色