Der 'this'-Pointer
Teil des Abschnitts Objektorientierte Programmierung der C++-Journey von Coddy — Lektion 7 von 104.
In C++ ist this ein Zeiger auf das aktuelle Objekt. Verwenden Sie this->, um auf Member zuzugreifen, insbesondere wenn Parameternamen mit Membernamen übereinstimmen.
Ohne this überdeckt der Parameter das Member
void Player::setName(std::string name) {
name = name; // Weist den Parameter sich selbst zu! Member unverändert.
}Verwenden von this->, um Werte korrekt zuzuweisen
void Player::setName(std::string name) {
this->name = name; // Weist den Parameter dem Member zu
}Verwendung von this-> in Methoden
std::string Player::getStatus() {
return this->name + " - Score: " + std::to_string(this->score);
}Der this-Pointer zeigt immer auf die aktuelle Objektinstanz. Anders als in Java und C#, wo this eine Referenz ist, ist es in C++ ein Pointer, daher verwenden Sie -> anstelle von ., um auf Member zuzugreifen.
Aufgabe
MittelImplementieren Sie die Player-Klassenmethoden unter Verwendung von this->, um zwischen Elementen und Parametern mit demselben Namen zu unterscheiden:
- Setter-Methoden: verwenden Sie
this->, um Parameter den Elementen zuzuweisen getStatus(): verwenden Siethis->, um auf Elemente zuzugreifen, geben Sie"<name> - Score: <score>, Level: <level>"zurück
Spickzettel
In C++, ist this ein Zeiger auf das aktuelle Objekt. Verwenden Sie this->, um auf Member zuzugreifen, insbesondere wenn Parameternamen mit Membernamen übereinstimmen.
Ohne this überschattet der Parameter den Member:
void Player::setName(std::string name) {
name = name; // Weist den Parameter sich selbst zu! Member unverändert.
}Verwendung von this-> zur korrekten Zuweisung von Werten:
void Player::setName(std::string name) {
this->name = name; // Weist den Parameter dem Member zu
}Verwendung von this-> in Methoden:
std::string Player::getStatus() {
return this->name + " - Score: " + std::to_string(this->score);
}Der this-Zeiger zeigt immer auf die aktuelle Objektinstanz. Im Gegensatz zu Java und C#, wo this eine Referenz ist, ist es in C++ ein Zeiger, daher verwenden Sie -> anstelle von ., um auf Member zuzugreifen.
Probier es selbst
#include <iostream>
#include "Player.h"
int main() {
std::string name;
int score, level;
std::getline(std::cin, name);
std::cin >> score >> level;
Player player;
player.setName(name);
player.setScore(score);
player.setLevel(level);
std::cout << "Name: " << player.name << std::endl;
std::cout << "Score: " << player.score << std::endl;
std::cout << "Level: " << player.level << std::endl;
std::cout << player.getStatus() << std::endl;
return 0;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienC++ Build & KompilierungHeader-Dateien & QuelldateienNamensräume & GültigkeitsbereicheEinführung in OOP in C++Klassen vs. ObjekteDer 'this'-PointerMethoden (Elementfunktionen)Attribute (Datenelemente)Grundlagen zu Ctors & DtorsRückblick - Einfacher Taschenrechner4Klasseneigenschaften
Instanz- vs. statische MemberGetter und SetterConst-MemberfunktionenMutable-SchlüsselwortStatische Methoden und VariablenFriend-Funktionen & KlassenZusammenfassung - Bankkonto-Manager7Vererbung
Grundlagen der VererbungZugriffsstufen bei VererbungAufrufreihenfolge von Ctor & DtorÜberschreiben von MethodenVirtuelle Funktionen & VTableMehrfachvererbungVirtuelle VererbungRückblick - Mitarbeiter-Hierarchie2Speicherverwaltung
Stack vs. Heap SpeicherZeiger und ReferenzenDynamischer Speicher (new/delete)Smart Pointers in C++RAII in C++Rückblick – Dynamischer Array-Manager5Kapselung
Zugriffsspezifizierer in C++Zugriffsspezifizierer im DetailInformation HidingStruct vs. ClassVerschachtelte & innere KlassenRückblick - Studentenverwaltungssystem8Polymorphie
Kompilierzeit- vs. Laufzeit-PolymorphieFunktionsüberladungVirtuelle Funktionen – WiederholungRein virtuelle FunktionenAbstrakte KlassenInterface-Design in C++Dynamic Casting & RTTIZusammenfassung – Formen-Rechner3Konstruktoren & Destruktoren
StandardkonstruktorParametrisierter KonstruktorKopierkonstruktorVerschiebekonstruktorKonstruktor-InitialisierungslistenDelegierende KonstruktorenDestruktoren im DetailRule of Three / Five / ZeroZusammenfassung - String-Klasse6Operatorüberladung
Einführung in die OperatorüberladungArithmetische OperatorüberladungVergleichsoperatorüberladungStream-OperatorenZuweisungsoperatorüberladungÜberladen der [] und () OperatorenTypumwandlungsoperatorenRückblick - Matrix-Klasse9Templates
FunktionstemplatesKlassentemplatesTemplate-SpezialisierungVariadische TemplatesSFINAE & Type Traits GrundlagenRückblick - Generische Container