2016-09-04 3 views
-1

gehen wir die nächste Funktion bezwecken:operator() Überlastung und c'tor Mehrdeutigkeit in Funktionsobjekte

class foo{ 
private: 
    int counter; 
public: 

    foo(int counter): counter(counter){} 
    foo& operator=(const foo&){...} 
    bool operator() (int variable){....} 

} 

int main(){ 
    foo f(4); 
    foo x(5); 
    x = f(4); 
    return 0; 
} 

wie funktioniert der Compiler weiß, wie man reagieren: x = f(5)? Ich habe nach einer Weile im Web und in Stack gesucht und habe keine genaue Antwort gefunden, wenn es ein Repost ist, sag es mir und ich werde die Frage löschen.

+1

Es sagt einfach: 'f' nicht deklariert ist. Jedenfalls kann ich die Ambiguität nicht sehen –

+2

Was ist 'f'? Bitte geben Sie eine [MCVE] (http://stackoverflow.com/help/mcve) – tkausl

+0

Mögliche Duplikat von [Operator Überladung] (https://stackoverflow.com/questions/4421706/operator-overloading) –

Antwort

0

ich eine einfache Methode eval es zu erklären, genannt hinzugefügt:

  • foo ist eine Klasse keine Methode.
  • eine Instanz von foo kann wie eine Methode verwendet werden.
  • Aufruf foo(5) erstellt eine Instanz von foo wo die counter = 5.

  • eval ist eine Elementfunktion von foo.

Sie rufen eval wie diese kann (vorerst dies die gleiche wie die () Operator tun wird):

foo f = foo(5); // create an instance of `foo` 
f(3); // returns true -> 3 < 5 
f(0); // returns false -> 6 < 5 
:

foo f = foo(5); // create an instance of `foo` 
f.eval(3); // returns true -> 3 < 5 
f.eval(0); // returns false -> 6 < 5 

Sie auch die () Operator verwenden können

HINWEIS:

Sie können auch schreiben (aber tun es nicht):

foo f = foo(5); // create an instance of `foo` 
f.operator()(3); // returns true -> 3 < 5 
f.operator()(0); // returns false -> 6 < 5 
4

Es hängt davon ab, ob die „(5)“ verwendet wird, um ein Objekt oder aufgerufen, ein bereits bestehendes Objekt zu konstruieren:

foo f(5); // calls the constructor 
f(5);  // calls operator() 
+0

das war eine Kernfunktion Ich bekomme nur jetzt .. danke! –

Verwandte Themen