Frage

Ich habe gerade einige C ++ Code (unter http://msdn.microsoft.com/en-us/library/k8336763(VS.71).aspx ), die eine Technik verwendet ich noch nie zuvor Typen hinzufügen zu einer vorhandenen Klasse gesehen habe:

class Testpm {
public:
   void m_func1() { cout << "m_func1\n"; }
   int m_num;
};

// Define derived types pmfn and pmd.
// These types are pointers to members m_func1() and m_num, respectively.
void (Testpm::*pmfn)() = &Testpm::m_func1;
int Testpm::*pmd = &Testpm::m_num;

int main() {
   Testpm ATestpm;
   Testpm *pTestpm = new Testpm;

   // Access the member function
   (ATestpm.*pmfn)();
   (pTestpm->*pmfn)();   // Parentheses required since * binds

   // Access the member data
   ATestpm.*pmd = 1;
   pTestpm->*pmd = 2;

   cout  << ATestpm.*pmd << endl
         << pTestpm->*pmd << endl;
}

Kann mir bitte jemand sagen, was diese Technik für abgeleitete Typen definieren aufgerufen wird, oder mich auf sie zu einem gewissen Dokumentation zeigen? Ich habe noch nie in 13 Jahren über sie kommen von C ++ verwendet, und möchte meine Unwissenheit beenden.

War es hilfreich?

Lösung

Der Kommentar ist falsch: pmfn und pmd sind nicht „Typen abgeleitet“ (sie sind nicht einmal Arten!). Sie sind Zeiger auf Elemente .

Andere Tipps

Ich glaube nicht, dass „Hinzufügen von Typen“ die Klasse ist. Sie scheinen nur definieren Arten von Zeigern auf Elementfunktionen und Mitgliedsdaten der Klasse zu werden, und dann diejenigen mit dem Member-Funktion und Datenelement zuzugreifen. Ähnlich wie Sie Typen nicht-Member-Funktionen erklären würde, aber als Mitglieder der Klasse der Syntax unterscheidet.

Auf dieser Seite hier

  

In Bezug auf ihre Syntax gibt es zwei   verschiedene Arten von Funktionszeigern:   Auf der einen Seite gibt es Hinweise auf   C Stammfunktionen oder auf statische C ++   Member-Funktionen. Auf der anderen Seite   gibt es Hinweise auf nicht-statische C ++   Member-Funktionen. Der grundlegende Unterschied   ist, dass alle Zeiger auf nicht-statische   Member-Funktionen benötigen eine versteckte   Argument: Der this-Zeiger auf ein   Instanz der Klasse. Halten Sie immer in   Sinn: Diese beiden Arten von Funktions   Zeiger sind nicht kompatibel mit jedem   andere.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top