classe (objekt) als typ



  • Wenn du Volkards Tutorial schon gelesen hast, dann lies halt das von Shade (der erste Link). Ich denke da sollte es klar werden...



  • In diesem ersten tutorial kann eine klasse sich in ein int verwandeln dass kapier ich auch nicht



  • Lightning* schrieb:

    complex produkt(complex f);
    

    wie ich sehen kann ist hier der typ eine klasse, wie geht dass .
    Lightning

    Klassen sind spezielle Typen (und können demzufolge auch an Funktionen weitergegeben werden). Diese Methode übernimmt z.B. ein Objekt vom Typ "complex", verrechnet es mit dem this-Objekt und gibt anschließend ein anderes Objekt wieder raus - mit dem du dann weiterrechnen kannst.



  • Ja , ich kapiere es doch was ist der rückgabe wert eines typs der eine klasse ist . Bitte ein beispiel und eine gute erklärung , weil ich merke dass ich es ürgen wie nicht kapiere .
    Bin wohl zu dumm
    Danke im voraus für eure hilfe .



  • Der Rückgabewert der Funktion wird dadurch bestimmt, was diese per "return ...;" nach außen weiterreicht.

    //Beipielklasse:
    struct klasse
    {
      string name;
      int alter;
      ...
    };
    
    //Funktion read() - liest Daten von Konsole und baut daraus ein 'klasse'-Objekt:
    klasse read()
    {
      klasse r;
      cout<<"Bitte Name angeben:";
      cin>>r.name;
      cout<<"Bitte Alter angeben:";
      cin>>r.alter;
      ...
      return r;
    }
    
    int main()
    {
      klasse user = read();//'user' ist ein 'klasse'-Objekt und wird mit dem Rückgabewert von read() initialisiert
      ...
    }
    


  • Ich glaube ich habe es kapiert .
    Doch noch ein beispiel wäre nett , deises beispiel ist super .
    Danke im voraus .



  • Ich könnte dir noch dutzende Beispiele geben, aber daraus lernst du auch nicht mehr als mit dem obigen.
    Das Prinzip einer Funktion ist immer das selbe: Im Funktionskopf wird festgelegt, mit welchen Typen (Parameter und Rückgabe) die Funktion arbeiten will - und im Rumpf erfolgt dann die eigentliche Berechnung. Dabei nimmt die Funktion die Werte der übergebenen Parameter und baut (vermutlich auf Basis dieser Werte) ein Objekt des Rückgabetyps auf und reicht dieses an den Aufrufer weiter.

    string baue_meldung(int nr,string pre="")
    //nimmt ein int (Zahl) und einen optionalen string (STL-Klasse für Zeichenketten) und baut daraus einen anderen string
    {
      string ret = pre + (pre.size()==0)?"":": ";
      static string meld[]={"unbekannter Fehler","Kein Fehler",...};//mögliche Fehlermeldungen
      static int meld_ct = sizeof(meld)/sizeof(meld[0]);
      if(nr+1>=meld_ct) nr=-1;
      return ret+meld[nr+1];//Rückgabe
    }
    
    int main()
    {
      cout<<baue_meldung(0)<<endl;          //Aufruf mit Wert nr=0, pre=""
      cout<<baue_meldung(1,"main()")<<endl; //Aufruf mit Wert nr=1, pre="main()"
    }
    


  • Also wenn eine klasse als parameter übergeben wird ist der wert des rückgegebenen wertes ein objekt .
    Eine Klasse gibt einen Objekt wieder , aber wenn im return befehl eine zahl zurückgegebn wird , was ist dann mit dem objekt .
    Wird die zahl eine art parameter für das objekt oder wie kann ich dass verstehen .
    Danke CSOLL im voraus



  • Hi CSTOLL , ich weiss es gehört nicht hie hin , kannst du mir deine mail geben damit ich dich in meine MSN KOntakte , hintue damit wir mal über MSN MEssenger chatan könne und zwar über C++ , damit du mir ein paar sahen erklären kannst .
    Danke im voraus Lightning



  • Kann mir jemand auf meine frage antworten bitte



  • Lightning* schrieb:

    Also wenn eine klasse als parameter übergeben wird ist der wert des rückgegebenen wertes ein objekt .

    Am besten du siehst auch die Internentypen wie int und char als Objekte, zu mindestens mir erleichtert es dann das Verstehen.

    Eine Klasse gibt einen Objekt wieder , aber wenn im return befehl eine zahl zurückgegebn wird , was ist dann mit dem objekt .

    Welchen Objekt?

    Also ich versuch mal das zu erklären (versuche!!):

    Wenn du alles als ein Objekt ansiehst, dann ist also auch int ein Objekt.
    Ein Objekt wird meistens mit einem Wert initialisiert, bei int, ist dies auch ein int. Wenn du in deinem Code Zahlen schreibst, dann ist das auch ein Objekt.

    int a = 123; // initialisiert das int-Objekt a mit dem int-Objekt mit dem Wert 123
    

    123 könntest du als ein Namensloses-Objekt ansehen, welches natürlich auch irgentwo im Speicher liegt.

    Sicherlich kennst du auch schon die float und double "Objekte". Die sehen in deinem Code so aus:

    1.0 // double objekt
    1.0f // float Objekt
    

    Diese Objekte initialisert du dann so:

    float b = 1234.56f;
    double c = 1234.56;
    

    Was passiert jetzt wenn du folgendes machst:

    float d = 123;
    

    Da es auch einen Konstroktor von dem float-Objekt gibt, der int-Objekte annimmt, geht das. Jetzt macht du eine Funktion:

    double bla(float a)
    {
    return a;
    }
    

    die rufst du auf mit:

    int k = bla(123);
    

    Nun wird der konstruktor von dem float objekt a aufgerufen und als parameter wird das int-objekt 123 übergeben. dann wird, da der rückgabe wert double und nicht float ist, der Konstruktor eines double-Objektes aufgerufen mit dem float-Objekt a als parameter. Und dann wird der konstruktor des int-objektes k mit einem double parameter aufgerufen.

    arg, das war irgentwie bestimmt falsch und kompliziert. was soll's...

    mfg.



  • Das mit den funktionen verstehe ich ja , danke noch mals um deine bemühungen. Das mit den objekten war eine gut idee und eine gute erklärung , doch mein haupt problem liegt da rin dass ich nicht weiss was bei einem typ der eine klasse ist , als rückgabewert erscheint . Bei einem int ist es eineZahl , bei einem char ist es ein buchstabe doch bei einer klasse sollte es ein objekt sein .
    Aber :
    in einer funktion die so geht :

    class complex { 
       private: 
         float real, imag; 
       public: 
         complex(float r=0; float i=0; ) { real=r; imag=i; }; 
         float getReal() { return real; }; 
         float getImag() { return imag; }; 
         void setReal(float r) { real=r; }; 
         void setImag(float i) { imag=i; }; 
         complex produkt(complex f);
    

    die letzte reihe interessiert mich also

    complex produkt(complex f);
    

    was macht sie genau : und sagen wir mal sie gibt etwas aus , was wäre dies ???
    Danjke im voraus

    Lightning



  • Lightning* schrieb:

    was macht sie genau : und sagen wir mal sie gibt etwas aus , was wäre dies ???

    Die Funktion gibt eine eine neue Instanz der Klasse complex zurück. Das kommt jetzt auch noch auf die Definition der FUnktion an.

    Wie du das mit dem ausgeben meinst versteh ich noch nicht ganz. Z.B. kann int ja auch nichts ausgeben. Es gibt halt nur Streams wie cout die ein int-Objekt annehmen können.

    mfg.



  • Was meinst du mit Instanz einer klasse



  • Lightning* schrieb:

    Was meinst du mit Instanz einer klasse

    meineklasse bla; <- bla ist die Instanz
    meineklasse bla2; <- bla2 ist die gleiche klasse aber eine neue instanz

    mfg.



  • Also eine Instanz , in diesem Fall ein objekt



  • Lightning* schrieb:

    Hi CSTOLL , ich weiss es gehört nicht hie hin , kannst du mir deine mail geben damit ich dich in meine MSN KOntakte , hintue damit wir mal über MSN MEssenger chatan könne und zwar über C++ , damit du mir ein paar sahen erklären kannst .

    Nein, kann ich nicht - und will ich nicht 😉 Wenn du Fragen zu C++ hast, bist du hier besser aufgehoben.



  • Ok , kein problem , nett von dir dass du wieder vorbeischaust .



  • Ja, das mache ich sowieso (allerdings gibt es da eine Erfindung namens "Wochenende", die mich mitunter etwas aufhält).


Anmelden zum Antworten