Vererbung: Problem beim Zugriff auf Private Attribute

BugSeeker

Grünschnabel
Servus,

habe eine rudimentäre Bankanwendung geschrieben mit einer Klasse konto und einer vererbten klasse girokonto. Bin auf dem objektorientierten Sektor neu und kriege den Fehler nicht raus. Hier mal die beiden Klassen (C++):

class konto
{

private:
double kontostand;
double kontonummer;
double betrag;

public:
konto();
~konto();
void einzahlen();
void abheben();
void ausgeben(double);
};

class girokonto : public konto
{

private:
double ueberziehungskredit;

public:
void einzahlen();
void abheben();
void ausgeben(double);
void pruefeueberziehungskredit();
};

und ich poste mal eine der Methoden mit der ich arbeiten möchte:

void girokonto::abheben()
{

cout <<"Wieviel moechten Sie abheben?"<<endl;
cout <<endl;
cout <<">>: ";
cin >>betrag;


kontostand = kontostand - betrag;
ausgeben(kontostand);

}

// error C2248: 'betrag' : cannot access private member declared in class 'konto'

Kann mir jemand sagen welchen Fehler ich mache? Was nutzt mir vererbung wenn ich die Attribute einer Oberklasse nicht weiternutzen kann ?

Gruss
Bug
 
Zuletzt bearbeitet:
betrag ist als private deklariert, deshalb können nur Mitglieder der Klasse darauf zugreifen. Wenn du willst, dass auch abgeleitete KLassen da rankommen (aber sonst keiner), musst du statt private protected verwenden.

Und ausserdem bitte beim nächsten Mal Code-Tags verwenden!
 
Es gibt drei mögliche Attribute:

public: Zugriff auf Element für alle und jeden

protected: Zugriff auf Element nur für die Klasse, Zugriff wird vererbt

private: Zugriff auf Element nur für die Klasse, Zugriff wird NICHT vererbt

Ändere in der Konto-Klasse private auf protected bei den Membern um, die du auch in abgeleiteten Klassen verwenden willst.
 
Das Protected bedeutet doch aber, dass ich von der Klasse Girokonto die Variablen-Werte nicht verändern kann, oder ?

Gruss
Bug
 
Doch, kannst du. Das hat nichts damit zu tun, dass die Werte const (also unveränderbar) sind. Die Variablen sind "protected" in dem Sinne, dass sie vor Zugriff von ausserhalb der Klassenhierarchie geschützt sind. Das mit dem const ist eine andere Geschichte.
Übrigens heisst es ja nicht ohne Grund "Variable". ;)
 
Zurück