# Vererbung: Problem beim Zugriff auf Private Attribute



## BugSeeker (2. Mai 2004)

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


----------



## Kachelator (2. Mai 2004)

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!


----------



## Endurion (2. Mai 2004)

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.


----------



## BugSeeker (2. Mai 2004)

Das Protected bedeutet doch aber, dass ich von der Klasse Girokonto die Variablen-Werte nicht verändern kann, oder ?

Gruss
Bug


----------



## Kachelator (2. Mai 2004)

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".


----------



## BugSeeker (2. Mai 2004)

Danke für die Hilfe, werd das gesagte erstmal umsetzen =)

Gruss
Bug


----------

