c++操作符重载Int类型
C++ Operator Overloading Int Types
我正在c++中编写一个分数类,并在新类中定义了frac和int的添加,但它要求它们以该顺序显示:frac + int。有没有一种方法在Int类型中重载+,这样我们就有了一个接受frac并输出frac的函数?或者有没有办法在新类中颠倒顺序?
我已经定义了frac + frac和frac += frac操作符。这两个函数是:frac operator+=(int b)
{
frac c = { n + b*d, d };
return c;
}
frac operator+(int b)
{
frac c = *this;
frac d = { b };
c += d;
return c;
}
像这样:
frac int::operator+=(frac& b)
{
frac c = { this * b.den() + b.num(), b.den() };
return c;
}
但我不确定如何真正做到这一点。
下面问题的代码:
frac &operator+=(frac b)
{
frac c = { n * b.den() + b.num() * d, d * b.den() };
n = c.num();
d = c.den();
return *this;
}
frac operator+(int a, frac b)
{
return frac{ a } += b;
}
没有int
类所以你不能做你建议的但简单的事情是声明一个函数像这样(在你的类中)
friend frac operator+(int a, frac b);
这样,当使用另一个顺序时将调用此函数。编辑:您需要使用friend
说明符,因为函数不在类中,我忘了这一点。
这样做的正确方法是使frac
具有来自int的隐式构造函数,并使用自由的operator+
,以便转换适用于两个参数。你也可以根据+=
来实现+
等等。例如
struct frac
{
frac(int x) { /* initialize frac with x */ }
frac &operator+=(frac f) { /* add f to this */ return *this; }
};
frac operator+(frac f1, frac f2)
{
return f1 += f2;
}
Update:有些人认为隐式转换构造函数是糟糕的风格;如果你是其中之一,那么你可以通过使用显式构造函数和编写一系列带精确参数的操作符来解决它,例如
frac operator+(int f1, frac f2) { return frac(f1) += f2; }
frac operator+(frac f1, int f2) { return f1 += frac(f2); }
frac operator+(frac f1, frac f2) { return f1 += f2; }
声明成员操作符为静态,可以有两个形参。请参阅WholeNumber的声明——操作符是静态的,没有*this的实例。
Visual Studio中交叉编译对象中的操作符
相关文章:
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 多维数组 C++ 中数组下标的类型"int[int]"无效
- 指针问题:从不兼容的类型"int"分配给"int *"
- 数组类型 int[n][n] 不可赋值,因为表达式必须具有常量值
- 错误:数组下标的类型"int[int]"无效
- 运行时错误:引用绑定到类型"int"的未对齐地址0xbebebebebebebec6,这需要 4 个字节对齐 (stl_vector.h)
- 类型为 "int*" 的参数与 C++ 中错误类型"int**"参数不兼容
- 类型"int"和"const char [15]"到二进制"运算符<<"的无效操作数^
- 从类型bankAccount的返回值到函数返回类型int没有可行的转换
- for 循环说 - 错误 成员引用基类型"int [13]"不是结构或联合
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- 如何增加模板类型 int 参数?
- 尝试使用 Array 类的模板构造整数数组时,错误:为什么数组类型"int [5]"不可分配,
- 如何为底层类型 int 的枚举专门化类
- 数组下标编译的无效类型'int[int]'由于 -Wfatal 错误而终止
- 不能将 "const char*" 类型的值分配给类型 "int" 的实体
- 数组下标的无效类型INT [INT]
- 请求在"伺服控制器"中请求成员"附加",该成员属于非类类型"int"
- 数组类型 'int [8]'不可分配
- 未声明的标识符和类型"int"从 main 调用类时出现意外错误