ein- und ausgabe überladen als friend



  • Ich hab 2 Klassen wobei die eine klasse public erbt.
    Nun soll ich bei der 2.Klassen die ein- und ausgabe überladen.
    Also in Klasse2:

    friend ostream &operator<<(ostream& , pkw& );
    friend istream &operator>>(istream& , pkw& );

    Nur wenn ichs jetzt auserhalb der klasse definiere kann man nicht auf die privaten datenmember der 2.Klasse zugreifen.
    Warum? ist doch eigentlich friend?!?

    ostream &operator<<(ostream& cout, pkw& p)
    {
    cout<<"Anzahl: "<<p.getcount()<<endl;
    cout<<"Marke "<<p.marke<<endl;
    cout<<"Baujahr: "<<p.baujahr<<endl;
    cout<<"Motor vom ";
    cout<<"Hersteller: "<<(p.getname()? p.getname() :"")<<endl;
    return cout<<"Leistung: "<<p.getpower()<<endl;
    };

    istream &operator>>(istream &cin, pkw &p)
    {
    char buffer[128];
    cout<<"Marke: ";
    cin.getline(buffer, sizeof (buffer), '\n');
    strcpy(p.marke,buffer);
    double b=2001;
    cout<<"Baujahr: "; cin>>b;
    cin.clear(); cin.ignore(INT_MAX, '\n');
    p.baujahr=b;
    cout<<"Hersteller:";
    cin.getline(buffer, sizeof (buffer), '\n');
    p.setname(buffer);
    double d=0.0;
    cout<<"Leistung[Kw]:"; cin>>d;
    cin.clear(); cin.ignore(INT_MAX, '\n');
    p.setpower(d); return cin;
    };

    Thx magni* 🙂

    // edit: ups, bestimmt falsches forum (sorry)



  • ich benutz zwar keine friends aber versuchs mal mit protected anstatt private

    btw. falsches forum -> c/c++



  • Hab ich mir gedacht, das mit dem falschen Forum (war mal wieder zu schnell).

    Leider ist alles so in der Aufgabe vorgegeben und irgendwie hats auch nicht mit der Vererbung zu tun, weil der zugriff auf die eigenen (Klasse 2) Datenmember funktioniert ja nicht.



  • poste doch mal die aufgabenstellung
    ich werd aus deinem ersten post nich richtig schlau



  • Die Aufgaben stellung ist 2 Seiten lang.
    Mein problem ist eigentlich unabhängig von der Vererbung.
    Ich soll die Ausgabe einer Klasse überladen, habe keine get bzw. set Funktion, will aber auf die privaten Member zugreifen, also FRIEND.
    Nur funktioniert es nicht, compiler sagt erkann nicht auf die privaten Member der Klasse zu greifen.
    Muss dazu noch sagen das die überladung im private Teil deklariert wurde.

    Wenn ich die Aufgabenstellung griffbereit hab werd ich sie dann mal posten, weil es noch andere Fragen gab.

    Thx magni*



  • Hat keiner ne Lösung??
    Muss morgen die Aufgabe abgeben. 😞


Log in to reply