2010-02-16 6 views
5

Zu viel C# und zu wenig C++ macht mir schwindlig ... Könnte mich irgendjemand daran erinnern, was diese C++ Deklaration bedeutet? Insbesondere die Endung "const". Danke vielmals.Verstehe die const Methodendeklaration nicht

protected: 
    virtual ostream & print(ostream & os) const 
+0

Danke, Daniel, es für mich zu bearbeiten. : D – smwikipedia

Antwort

10

Ein const Methode wird einfach ein constthis Zeiger erhalten.

In diesem Fall wird der this Zeiger vom const ThisClass* const Typ anstelle des üblichen ThisClass* const Typs sein.

Dies bedeutet, dass Elementvariablen nicht innerhalb einer const-Methode geändert werden können. Nicht einmal Nicht-const Methoden können von einer solchen Methode aufgerufen werden. Eine Membervariable kann jedoch als mutable deklariert werden. In diesem Fall gilt diese Einschränkung nicht.

Wenn Sie also ein const-Objekt haben, sind die einzigen Methoden, die der Compiler aufrufen wird, diejenigen, die durch das Schlüsselwort const als sicher gekennzeichnet sind.

+4

+1 für die Erwähnung von 'this' 'const'. – Blindy

+1

es sei denn die Mitglieder sind veränderbar getaggt – pm100

+0

@ pm100: Danke. Notiz zu veränderbaren Mitgliedern hinzugefügt. –

4

Die Endung const bedeutet, dass die print Funktion in (und kann daher keine Mitgliederfunktionen nicht nicht in der Lage sein sollte, es erklärt wird, um den Zustand von einem der Mitglieder der Klasse ändern dieser Klasse aufrufen, die nicht sind auch erklärt const).

Im Beispiel unten, die print Funktion in der Klasse Foo kann keine der Membervariablen von Foo ändern (es sei denn, sie mutable deklariert sind), und alle nicht-const-Funktionen in Foo nicht aufrufen kann.

class Foo { 
public: 
    Foo(string value) { m_value = value; } 
protected: 
    ostream & print(ostream & os) const { 
     m_value = string("foobar"); // won't compile 
     os << m_value; 
     return os; 
    } 
private: 
    string m_value; 
}; 
3

Die const auf der Methode Erklärung weist den Compiler an, dass die Funktion sicher ist, auf ein konstantes Objekt des Typs rufen die Funktion ein Mitglied ist. Es signalisiert dem Compiler außerdem, dass die Funktion den Status des Objekts nicht ändern soll und dass es keine Membervariablen ändern kann, die nicht als mutable markiert sind.

Wenn Sie die const weglassen, wird dieser Code nicht funktioniert:

const Foo bar; 
bar.print(std::cout); // Will fail to compile unless 'print' is marked const 
1

Sie deklarieren eine geschützte virtuelle Methode namens print, die als Parameter einen Verweis auf einen Ostream verwendet und einen Verweis auf einen Ostream zurückgibt.

Das Schlüsselwort const bedeutet, dass die Methode den Status des Objekts nicht ändern kann, der Zeiger this wird const sein.

Eine virtuelle Methode ist eine Methode, deren Verhalten in einer erbenden Klasse außer Kraft gesetzt werden kann. Im Grunde gibt das virtuelle Schlüsselwort C++ die Fähigkeit, Polymorphie zu unterstützen.

Und schließlich, wenn Sie nicht wissen, was ein Referenz go there

Kommend von C# ist, ich nehme an, Sie wissen, was Mittel geschützt :)

Verwandte Themen