隐式转换运算符重载语法

时间:2010-09-03 06:26:17

标签: c++ operator-overloading

我是中级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;
}

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:8)

operator int()是一个转换函数,用于声明从Aint的用户定义转换,以便您可以编写类似

的代码
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;

}