Синтаксис перегрузки операторов неявного преобразования - PullRequest
2 голосов
/ 03 сентября 2010

Я средний пользователь 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 ]

8 голосов
/ 03 сентября 2010

operator int() - это функция преобразования , которая объявляет пользовательское преобразование из A в int, так что вы можете написать код, подобный

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

Это отличаетсяиз int operator()(), который объявляет оператор вызова функции, который не принимает аргументов и возвращает int.Оператор вызова функции позволяет вам писать код, подобный

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

Какой из них вы хотите использовать, полностью зависит от поведения, которое вы хотите получить.Обратите внимание, что операторы преобразования (например, operator int()) могут вызываться в неожиданное время и могут вызывать пагубные ошибки.

0 голосов
/ 03 сентября 2010

Вы можете использовать это

#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;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...