C++ c+中的重载转换运算符+;
当运算符函数作为成员函数实现时,最左边的操作数必须是运算符类的对象 但是在下面的代码中C++ c+中的重载转换运算符+;,c++,operator-overloading,C++,Operator Overloading,当运算符函数作为成员函数实现时,最左边的操作数必须是运算符类的对象 但是在下面的代码中 #include<iostream> using namespace std; class ffloat { private: float a; public: ffloat():a(34.566){} operator int () { return a=static_cast<in
#include<iostream>
using namespace std;
class ffloat {
private:
float a;
public:
ffloat():a(34.566){}
operator int () {
return a=static_cast<int >(a);
}
};
int main() {
ffloat w;
int x;
x=w;
cout<<x<<endl;
}
#包括
使用名称空间std;
班轮{
私人:
浮动a;
公众:
fflot():a(34.566){}
运算符int(){
返回a=静态_转换(a);
}
};
int main(){
福洛特w;
int x;
x=w;
实际上,a=static_cast(a)
意味着a
应该从floata
转换为整数,然后它将其作为整数返回
一切都是有效的,运算符int
应该返回int
operator int()
是一个转换函数,它唯一的操作数是隐式的'this'参数。因此x=w
没有违反规则,因为x不是转换的操作数。这就是写int(w)可以的部分原因
这里没有缺少的操作数。您所指的规则是关于“+-*/”之类的运算符,它可以有两个操作数。返回a=static\u cast(a)
你明白它的作用吗?如果你把操作符设为常量函数,编译器会防止这个可能的错误。这有什么问题吗…我不知道。这就是为什么我问你是否明白它的作用。它会改变对象中a
的值。是的…但我写了代码,让操作符重载注意…@neilkrirk@virusai转换运算符的正常语义是,它返回一个转换后的值,但不对对象进行任何更改。例如,ffloat w;cout我不理解您的解释。让a
为a
的前一个值的整数版本(将四舍五入)然后将其作为返回值返回此运算符int
将修改对象的状态。这不是转换操作通常的工作方式。嗯,不禁止更改状态(它不是“const”:)这不是我要问的问题根据规则我要问什么“当运算符函数作为成员函数实现时,最左边的操作数必须是运算符类的对象”,但在上面的代码中,对象不是最左边的操作数……然后转换运算符的行为就像一元运算符“如果我错了,请更正我”