隐式转换运算符重载语法 我是一个中级C++用户,我遇到了以下情况。下面显示的类定义可以使用g++编译器很好地编译。但我无法确切地理解整个语法的含义。 我猜函数运算符int返回一个int类型
此外,我不知道如何在main中使用重载运算符 任何帮助都将不胜感激。运算符int是一个转换函数,它声明了从a到int的用户定义转换,以便您可以编写如下代码隐式转换运算符重载语法 我是一个中级C++用户,我遇到了以下情况。下面显示的类定义可以使用g++编译器很好地编译。但我无法确切地理解整个语法的含义。 我猜函数运算符int返回一个int类型,c++,operator-overloading,C++,Operator Overloading,此外,我不知道如何在main中使用重载运算符 任何帮助都将不胜感激。运算符int是一个转换函数,它声明了从a到int的用户定义转换,以便您可以编写如下代码 A a; int x = a; // invokes operator int() A a; int x = a(); // invokes operator()() 这与int运算符不同,int运算符声明的函数调用运算符不带参数并返回int A a; int x = a; // invokes operator int() A a;
A a;
int x = a; // invokes operator int()
A a;
int x = a(); // invokes operator()()
这与int运算符不同,int运算符声明的函数调用运算符不带参数并返回int
A a;
int x = a; // invokes operator int()
A a;
int x = a(); // invokes operator()()
你想使用哪一个完全取决于你想得到的行为。请注意,转换运算符(例如运算符int)可能在意外时间被调用,并可能导致有害错误。您可以使用此运算符
#include <iostream>
using namespace std;
class A{
public:
A(int n) { _num=n;}
operator int();
private:
int _num;
};
A::operator int(){
return _num;
}
int main(){
A a(10);
cout<<a.operator int()<<endl;
return 0;
}
重载运算符?什么重载运算符?您的代码没有任何重载运算符。这就是你不能用它的原因。我大错特错了,关键字操作员把我带到别处去了。@vthulu:U的可能副本对社区来说似乎是新的,所以仅供参考,如果您对上述答案满意,您可能希望选择显示在此答案旁边的勾号,这基本上意味着您接受答案注意,转换运算符(例如运算符int)可能在意外时间被调用,并可能导致有害错误。我想说得更有力一点:离他们远点@炒作结束了。谢谢我读StackOverflow已经有一段时间了,但我从来没有真正贡献过。正如他们所说的-必要性…@sbi:是的,这是一个好的、大胆的建议-P每次我实现一个,它都是一个黑客。至少在C++0x中,使用显式转换运算符,其危害性将大大降低。@James:这里也是一样。我在过去十年里写的每一个人,不管怎样,在上半年;我从中吸取了教训,后来我不得不移除它,有时会很痛苦,因为它会在意外的时候被调用并导致问题。哦,我希望有人在C++1x方面有五年的经验,能为它写一本好书。