Attribute (Datenmember)
Teil des Abschnitts Objektorientierte Programmierung der C++-Journey von Coddy. Lektion 9 von 104.
Datenmember (Attribute) speichern den Zustand eines Objekts. Sie werden typischerweise als private deklariert und über öffentliche Getter-/Setter-methods aufgerufen. Dies wird als Kapselung bezeichnet.
Private Datenmember
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;
}
}Zugriffsbezeichner
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;
};Wenn Datenmitglieder private gemacht werden, werden sie vor externem Code verborgen. Getter geben ihre Werte zurück, Setter ändern sie mit optionaler Validierung. Dadurch werden deine Daten geschützt und der Zugriff darauf kontrolliert.
Aufgabe
MittelErstelle 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 dies möglich ist, andernfalls „Insufficient funds“
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 & QuelldateienNamespaces & GültigkeitsbereichEinführung in OOP mit C++Klassen vs. ObjekteDer „this“-ZeigerMethoden (Member-Funktionen)Attribute (Datenmember)Grundlagen zu Ctors & DtorsRückblick – Einfacher Taschenrechner4Klassenattribute
Instanz- vs. statische MemberGetter und SetterConst-MemberfunktionenMutable-SchlüsselwortStatische Methoden und VariablenFriend-Funktionen und -KlassenZusammenfassung – Bankkontoverwaltung7Vererbung
Grundlagen der VererbungZugriffsebenen bei der VererbungAufrufreihenfolge von Ctor & DtorÜberschreiben von MethodenVirtuelle Funktionen & VTableMehrfachvererbungVirtuelle VererbungRückblick – Mitarbeiterhierarchie2Speicherverwaltung
Stack- vs. Heap-SpeicherZeiger und ReferenzenDynamischer Speicher (new/delete)Intelligente Zeiger in C++RAII in C++Rückblick – Dynamischer Array-Manager5Kapselung
Zugriffsbezeichner in C++Zugriffsbezeichner im DetailInformationsverbergungStruct vs. KlasseVerschachtelte und innere KlassenWiederholung – Studierendenverwaltungssystem8Polymorphie
Polymorphie zur Compilezeit vs. LaufzeitFunktionsüberladungVirtuelle Funktionen erneut betrachtetRein virtuelle FunktionenAbstrakte KlassenInterface-Design in C++Dynamic Casting & RTTIRückblick – Shape-Calculator3Konstruktoren & Destruktoren
StandardkonstruktorParametrisierter KonstruktorKopierkonstruktorMove-KonstruktorKonstruktor-InitialisierungslistenDelegierende KonstruktorenDestruktor im DetailDrei-/Fünf-/Null-RegelZusammenfassung – String-Klasse6Operatorüberladung
Einführung in die OperatorüberladungArithmetische OperatorüberladungVergleichsoperatorüberladungStream-OperatorenZuweisungsoperatorüberladungÜberladung der Operatoren [] und ()TypkonvertierungsoperatorenWiederholung – Matrix-Klasse9Templates
FunktionstemplatesKlassen-TemplatesTemplate-SpezialisierungVariadische TemplatesGrundlagen zu SFINAE und Type TraitsRückblick – Generischer ContainerÜbe selbstständig: Online-C++-Compiler