2016-05-05 19 views
-4

Ich habe Funktion get_time() in einer Klasse, die ein privates Mitglied zurückgeben.C++ - wie benutzt man das Objekt, das die Funktion aufruft?

Wie kann ich das Objekt verwenden, das diese Funktion in der Implementierung der Funktion aufgerufen hat.

Zum Beispiel in comp-Objekt, die einen Member Call-Namen Anruf get_time Funktion haben (comp.get_time()): Ich möchte in der Lage, die comp.name in der det_time_function zu bekommen. Wie kann ich?

beispiels

class comp 
{ 
    public: 
    string name; 
} 

class calc : public comp 
{ 
    private: 
    int time; 
    public: 
    int get_time(){ 
    ///here I want to get the name of the object which call the calc 
    ///should I use this.name? 
    } 
} 

calc calc_obj; 
calc.get_time(); 
+2

Code. Teilen Sie Ihren Code. (Speziell die Klasse) Wir können Ihnen Ratschläge geben, aber wenn Sie Ihren Code sehen, stellen wir sicher, dass wir Ihnen Ratschläge geben, von denen wir überzeugt sind, dass sie für Ihre Umgebung funktionieren. Auf diese Weise nimmt sich niemand die Zeit, um dir eine vollwertige Antwort zu geben und dann gehst du: "Oh, warte, ich habe meinen Kurs mit diesen Parametern so initialisiert, dass deine Antwort für meinen Fall nicht funktioniert." :] – 8protons

+0

Verwenden Sie dies (http://www.tutorialspoint.com/cplusplus/cpp_this_pointer.htm) –

+1

Was hindert Sie daran, die privaten Mitglieder aus der Definitionsfunktion der öffentlichen Mitglieder zu sehen? und mit 'this->' Zeiger wird Ihnen auch helfen –

Antwort

0

Abgeleitete Klassen können nicht die privaten Mitglieder ihrer Basisklassen zugreifen. Wenn Sie jedoch protected Deklaration statt private verwenden, können Sie das tun. Aber eine andere Art und Weise (die Sie üben und lernen sollte) ist durch eine Getter Bereitstellung() Funktion in Ihrem Elternklasse, die ihren Objektnamen return, dann können Sie verwenden, dass Getter es von der Kind-Klasse zu rufen und bekommen das private Mitglied der Elternklasse; name in Ihrem Fall.

Ein grundlegendes getter() sieht ungefähr so ​​aus:

YourVariableTypeHere get_VariableName() 
{ 
    return this->VariableName; 
} 
0
int get_time(){ 
    ///here I want to get the name of the object which call the calc 
    ///should I use this.name? 
} 

Nr die Basisklasse öffentliches Datenattribut zu holen, würden Sie

comp::name 

Beachten Sie jedoch verwenden, dass im Allgemeinen Öffentliche Datenattribute sollten vermieden werden (weil dadurch die Kapselung deaktiviert wird).


Auch in dieser Frage scheint es möglich zu sein, dass ein anderes Objekt oder eine Funktion der abgeleiteten Klasse-Methode aufrufen, nicht nur die Basisklasse. Vielleicht ist deine Frage also nicht oder vielleicht irreführend.

Eine Möglichkeit, ein "Label" für beide Fälle bereitzustellen, besteht darin, eine Zeichenfolge in die Methode einzufügen.

calc::get_time("caller-name"); 

Nun wird der Name des Verfahrens vorgesehen ist, und das Verfahren es von der Basisklasse nicht holen muß, noch von dem aus je Objekt aufgerufen GET_TIME() aufgerufen wird.

Verwandte Themen