Ich verstehe die normale Überlastung des Bedieners. Der Compiler kann sie direkt in einen Methodenaufruf übersetzen. Ich bin mir nicht sehr klar über den -> Betreiber. Ich schrieb meinen ersten benutzerdefinierten Iterator und ich fühlte mich wie der - Operator. Ich warf einen Blick auf den Code stl Quelle und umgesetzt meine eigene wie es:Wie funktioniert das Überladen von Pfeil-> Operatoren intern in C++?
MyClass* MyClassIterator::operator->() const
{
//m_iterator is a map<int, MyClass>::iterator in my code.
return &(m_iterator->second);
}
Dann kann ich eine Instanz von MyClassIterator verwenden wie:
myClassIterator->APublicMethodInMyClass().
Sieht aus wie der Compiler zwei Schritte hier der Fall ist. 1. Rufen Sie die Methode ->() auf, um eine temporäre MyClass * -Variable zu erhalten. 2. Rufen Sie die APublicMethodInMyClass für die Variable temp auf und verwenden Sie ihren Operator ->.
Ist mein Verständnis korrekt?
Eigentlich ist es 'myClassIterator.operator ->() -> APublicMethodInMyClass()' –
Danke für die Erklärung. Sollte der myClassIterator.operator ->(). APublicMethodInMyClass() myClassIterator.operator sein ->() -> APublicMethodInMyClass()? Der Rückgabetyp von ->() ist MyClass * – Ryan
hab es. Danke Seth. – Ryan