Attribute (Datenelemente)
Teil des Abschnitts Objektorientierte Programmierung der C++-Journey von Coddy — Lektion 9 von 104.
Datenelemente (Attribute) speichern den Zustand eines Objekts. Sie werden normalerweise als private deklariert und über öffentliche Getter/Setter-Methoden aufgerufen. Dies wird als Kapselung bezeichnet.
Private Datenelemente
class BankAccount {
private:
std::string accountName;
int balance;
};Öffentliche Getter und Setter
class BankAccount {
private:
std::string accountName;
int balance;
public:
void setBalance(int balance) {
this->balance = balance;
}
int getBalance() {
return this->balance;
}
};Setter mit Validierung
void BankAccount::setBalance(int balance) {
if (balance >= 0) {
this->balance = balance;
}
}Zugriffsspezifizierer
class MyClass {
private: // Nur innerhalb der Klasse zugänglich
int secret;
public: // Von überall zugänglich
int getSecret() { return secret; }
protected: // In der Klasse und in Unterklassen zugänglich
int shared;
};Indem man Datenelemente private macht, werden sie vor externem Code verborgen. Getter geben ihre Werte zurück, Setter ändern sie mit optionaler Validierung. Dies schützt Ihre Daten und kontrolliert, wie auf sie zugegriffen wird.
Aufgabe
MittelErstellen Sie eine BankAccount-Klasse mit privaten Datenelementen und öffentlichen Zugriffsmethoden:
- Private Member:
accountName(string),balance(int) - Setter:
setAccountName,setBalance - Getter:
getAccountName,getBalance deposit(int amount)— erhöht den Kontostand, wenn amount > 0 istwithdraw(int amount)— gibt "Success" zurück, wenn möglich, andernfalls "Insufficient funds"
Spickzettel
Datenelemente (Attribute) speichern den Zustand eines Objekts und werden normalerweise als private für die Kapselung deklariert.
Private Datenelemente:
class BankAccount {
private:
std::string accountName;
int balance;
};Öffentliche Getter und Setter:
class BankAccount {
private:
std::string accountName;
int balance;
public:
void setBalance(int balance) {
this->balance = balance;
}
int getBalance() {
return this->balance;
}
};Setter mit Validierung:
void BankAccount::setBalance(int balance) {
if (balance >= 0) {
this->balance = balance;
}
}Zugriffsspezifizierer:
class MyClass {
private: // Nur innerhalb der Klasse zugänglich
int secret;
public: // Von überall zugänglich
int getSecret() { return secret; }
protected: // In der Klasse und in Unterklassen zugänglich
int shared;
};Probier es selbst
#include <iostream>
#include "BankAccount.h"
int main() {
std::string name;
int initial, depositAmt;
std::getline(std::cin, name);
std::cin >> initial >> depositAmt;
BankAccount account;
account.setAccountName(name);
account.setBalance(initial);
std::cout << "Account: " << account.getAccountName() << std::endl;
std::cout << "Balance: " << account.getBalance() << std::endl;
account.deposit(depositAmt);
std::cout << "After deposit: " << account.getBalance() << std::endl;
std::string result = account.withdraw(2000);
std::cout << "Withdraw 2000: " << result << std::endl;
std::cout << "Final Balance: " << account.getBalance() << 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