繁体   English   中英

隐式转换运算符重载语法

[英]Implicit Conversion Operator Overloading syntax

我是一个中级C ++用户,我遇到了以下情况。 下面显示的类定义使用g ++编译器编译得很好。 但我无法确定整个语法的含义。
我的猜测是函数operator int()返回一个int类型。

而且,我无法弄清楚如何在main()使用重载的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;
}

任何帮助将不胜感激。

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

A a;
int x = a; // invokes operator int()

这与int operator()() ,它声明了一个不带参数的函数调用运算符并返回一个int 函数调用操作符允许您编写类似的代码

A a;
int x = a(); // invokes operator()()

您要使用哪一个完全取决于您想要获得的行为。 请注意,转换运算符(例如, 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;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM