我是中级C ++用户,遇到以下情况。下面显示的类定义使用g ++编译器编译得很好。但我无法确定整个语法的含义
我的猜测是函数operator int()
返回int
类型。
此外,我无法弄清楚如何在operator ()
中使用重载的main()
class A
{
public:
A(int n) { _num = n; } //constructor
operator int();
private:
int _num;
};
A::operator int() // Is this equivalent to "int A::operator()" ??
{
return _num;
}
int main()
{
int x = 10;
A objA(x); //creating & initializing
// how to use operator() ?
// int ret = objA(); // compiler error when uncommented
return 0;
}
任何帮助将不胜感激。
答案 0 :(得分:8)
operator int()
是一个转换函数,用于声明从A
到int
的用户定义转换,以便您可以编写类似
A a;
int x = a; // invokes operator int()
这与int operator()()
不同,int
声明函数调用运算符不带参数并返回A a;
int x = a(); // invokes operator()()
。函数调用操作符允许您编写类似
operator int()
您要使用哪一个完全取决于您想要获得的行为。请注意,转换运算符(例如{{1}})可能会在意外时间被调用,并可能导致恶意错误。
答案 1 :(得分:0)
你可以使用这个
#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;
}