Zugriffskombinationen



  • Hallo ich bins wieder. Die Aufgabe 3 habe soweit noch geschaft, aber gegen Ende wurde es schwieriger:
    Aufgabe3:
    3.1 Definieren Sie eine Klasse Vater mit je einem public, private und
    protected Datenelement vom Typ int und einer Methode print(). Leiten
    Sie von dieser Klasse die Klassen Kind1 (public) und Kind2 (private) ab.
    Überladen Sie in diesen Klassen die Methode print(). Welche der geerbten Datenelemente können Sie hier ausgeben?

    3.2 Definieren Sie im main-Programm Objekte der 3 Klassen (papa (Klasse Vater),
    hugo (Klasse Kind1) und susi (Klasse Kind2)). Auf welche Datenelemente
    können Sie jeweils von außen zugreifen?

    3.3 Zuweisungskompatibilität: Deklarieren Sie zwei weitere Objekte der Klasse Vater (papa1, papa2) und initialisieren Sie diese Objekte mit den Objekten der
    Klassen Kind1 bzw. Kind2. Machen Sie außerdem den Versuch, einen Pointer
    (Typ Vater*) mit den Adressen der Objekte hugo und susi zu initialisieren. Warum geht die eine Zuweisung und die andere nicht?

    Meine Lösung:

    #include <iostream>
    using namespace std;
    
    class Vater{
    
    public:
    	int x;
    Vater(int x_=0,int y_=0,int z_=0) : x(x_),y(y_),z(z_){}
    private:
    	int y;
    
    protected:
    	int z;
    
    	void print(){
    
    	}
    
    };
    
    class Kind1 : public Vater {
    
    public:
    	void print() {
    		cout << "(public) x: " << Kind1::x << endl;
    		//cout << "(private) y: " << Kind1::y; (Fehler: Zugriff nicht möglich)
    		cout << "(protected) z: " << Kind1::z << endl << endl;
    	}
    
    };
    
    class Kind2 : private Vater {
    public:
    	void print() {
    		cout << "(public) x: " << Kind2::x << endl;
    		//cout << "(private) y: " << Kind1::y; (Fehler: Zugriff nicht möglich)
    		cout << "(private) y: " << Kind2::z << endl << endl;
    
    	}
    
    };
    
    int main()
    {
    	Vater papa;
    	Vater papa1,papa2;
    	Kind1 hugo;
    	Kind2 susi;
    
    	cout << "Zugriff ueber Kind1:" << endl;
    	hugo.print();
    	cout << "Zugriff ueber Kind2: " << endl;
    	susi.print();
    
    	cout << "Zugriff von aussen:" << endl;
    	cout << "(public) x: " << papa.x << endl;
    	//cout << "(private) y: " << papa.y << endl; (Fehler: Zugriff nicht möglich)
    	//cout << "(private) y: " << papa.z << endl; (Fehler: Zugriff nicht möglich)
    
    	return 0;
    }
    //Zu Aufgabe 3.1: 
    //Kind1 kann auf die geerbten Datenelemente x und z zugreifen und nicht auf y.
    //Kind2 kann auf alle geerbten Datenelemente der Klasse Vater zugreifen.
    
    //Zu Aufgabe 3.2:
    //Von außen kann man nur auf das Datenelement x zugreifen.
    

    Die Aufgabe 3.3 habe ich nicht so ganz hingekriegt, besser gesagt gar nicht:).
    Ich glaube 3.1 und 3.2 stimmen bis jetzt oder?



  • hausaufgabenservive 2k5?



  • 3.2: Was du bislang für 'papa' erledigt hast, mußt du auch noch für die beiden Kinder (susi und hugo) machen.

    3.3: steht doch in der Aufgabenstellung (den Pointer erzeugst du mit "Vater* pvat=variable;").


Anmelden zum Antworten