2010-09-03 5 views
2

Je suis un utilisateur C++ intermédiaire et j'ai rencontré la situation suivante. La définition de classe ci-dessous se compile bien avec un compilateur g ++. Mais je ne peux pas mettre le doigt sur ce que signifie exactement toute la syntaxe.
Je suppose que la fonction operator int() renvoie un type int.Syntaxe de surcharge de l'opérateur de conversion implicite

De plus, je ne peux pas comprendre comment utiliser le operator() surchargé dans 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; 
} 

Toute aide sera appréciée.

+0

opérateur 'Surchargé()'? Qu'est-ce qui a surchargé 'operator()'? Votre code n'a pas de 'opérateur()' surchargé. C'est pourquoi vous ne pouvez pas l'utiliser. – AnT

+0

Ouais. Je me suis vraiment trompé L'opérateur de mot-clé m'a emmené ailleurs. – vthulhu

+0

duplication possible de [Que signifie cette syntaxe C++ et pourquoi cela fonctionne?] (Http://stackoverflow.com/questions/3632746/what-does-this-c-syntax-mean-and-why-does-it -work) – sbi

Répondre

7

operator int() est une fonction de conversion qui déclare une conversion définie par l'utilisateur de A à int afin que vous pouvez écrire du code comme

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

Ceci est différent de int operator()(), qui déclare un opérateur d'appel de fonction qui ne prend aucun argument et renvoie un int. L'opérateur d'appel de fonction vous permet d'écrire du code comme

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

Lequel vous voulez utiliser dépend entièrement du comportement que vous voulez obtenir. Notez que les opérateurs de conversion (par exemple operator int()) peuvent être invoqués à des moments inattendus et peuvent provoquer des erreurs pernicieuses.

+0

Merci! C'est cool! – vthulhu

+0

@vthulu: U semble être nouveau à la communauté donc juste pour votre information, si vous êtes satisfait de la réponse ci-dessus, vous voudriez sélectionner la coche qui apparaît juste à côté de cette réponse qui signifie essentiellement que vous acceptez la réponse – mukeshkumar

+2

"Notez que les opérateurs de conversion (par exemple, opérateur int()) peuvent être invoqués à des moments inattendus et peuvent provoquer des erreurs pernicieuses." Je dirais un peu plus fort: __ Restez loin d'eux! __ – sbi

0

vous pouvez utiliser celui-ci

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

} 
Questions connexes