Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Frage :)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
24.03.2009, 10:51 Uhr
~frager
Gast


Gegeben ist folgendes Programm:

C++:
     #include <iostream>
     using namespace std;
     class Toto {
     public:
         Toto() { cout << " T"; }
         virtual ~Toto() { cout << " ~T"; }
         virtual void f() { cout << " T::f"; }
         const Toto& operator=(const Toto& t) {
            cout << " T::="; return t;
         }
     };
     class Harry : public Toto {
     public:
         Harry() { cout << " H"; }
         ~Harry() { cout << " ~H"; }
         virtual void f() { cout << " H::f"; }
     };
     int main() {
         Toto* pt1 = new Toto;
         Harry* ph1 = new Harry;
         pt1->f();
         ph1->f();
         delete pt1;
         cout << endl;

         pt1 = ph1; //*
         pt1->f();
         delete ph1;
         cout << endl;
     }


Welche Ausgabe produziert dieses Programm?
T T H T::f H::f ~T
<nichts> H::f ~H ~T


Meine Frage: wieso wird an der Stelle die ich mit * gekennzeichnet habe nichts ausgegeben ?
der "=" operator ist doch so definiert dass auf der Standardausgabe "T::=" ausgegeben wird, oder nicht?!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.03.2009, 12:20 Uhr
Kest
saint


Hi!

Liegt daran, dass pt1 ein Zeiger ist. Kein erzeugtes Objekt. Dein Zuweisungsoperator wird nicht aufgerufen.

C++:
//...
int main() {
         Toto pt1;
         Harry ph1;

         pt1 = ph1;
}


So geht's.
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.

Dieser Post wurde am 24.03.2009 um 12:23 Uhr von Kest editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.03.2009, 14:04 Uhr
~frager
Gast



Zitat von Kest:
Hi!

Liegt daran, dass pt1 ein Zeiger ist. Kein erzeugtes Objekt. Dein Zuweisungsoperator wird nicht aufgerufen.

C++:
//...
int main() {
         Toto pt1;
         Harry ph1;

         pt1 = ph1;
}


So geht's.


danke das macht sinn
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.03.2009, 14:17 Uhr
~frager
Gast


weil heute dienstag ist schieb ich mal noch ne frage hinterher, in der hoffnung dass sie mir genauso kompetent beantwortet wird wie die vorausgegangene

mir ist die bedeutung des schlüsselworts "const" in all seinen facetten noch nicht ganz klar:


C++:
const string& methode(const string& s) const {...}



-das const beim parameter steht dafür, so meine ich es zu wissen, dass s in der funktion nicht verändert werden darf/kann?!
-die bedeutung der anderen beiden const, hinter und vor der methode sind mir nicht ganz klar

kann mir dies noch mal jmd erläutern ?
danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
24.03.2009, 14:33 Uhr
ao

(Operator)


Das hinterste const gibts nur bei Methoden, die an eine Instanz gebunden sind, also nicht bei statischen Methoden.

C++:
class Klasse
{
public:
    void methode () const { .... }   // so ja

    static void methode () const { .... } // so nicht - Fehler.
};



Es bedeutet, dass die Methode den Zustand des einbettenden Objekts (also das, was im Methoden-Body mit *this ansprechbar ist) nicht verändert. Naiv gesprochen, du kannst innerhalb der Methode keiner Membervariablen etwas zuweisen.

Genau genommen gibts auch hier eine Ausnahme: Member, die mit "mutable" dekoriert sind, können doch zugewiesen werden.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: