Klassen werte weitergeben



  • Hallo Liebe programmier Gemeinde

    Ich habe eine frage.
    Ich habe eine Klasse "Mensch", in dieser Klasse habe ich Werte wie Name(string),Alter(int)...
    Im Mainprog erstelle ich so ein Objekt:

    Mensch M1(Hans, 18)
    Mensch M2(Tina,19)
    

    Was ich nun machen möchte ist eine Klasse "Dialog".
    Dialog soll ungefähr so aussehen:
    Name des ersten Mensches:"Hier kommt dann ein Text";
    Name des 2ten Mensches:"Hier kommt eine Antwort";

    Ist das überhaupt möglich?

    Gruss

    nimda4



  • Ich hab gerade überlegt ob ich nicht einfach eine methode in der klasse Mensch machen sollte?
    Die Frage (wenn das geht) welche sich dann stellt ist wie ich den 2ten Mensch erhalte?

    Gruss und Danke

    Nimda4



  • Heho, klar geht das.

    class Mensch
    {
    [...]//dein code
    void Dialog(Mensch Person2)
    {
    cout << "ich bin" << this->Name << endl;
    cout << "und der andere ist" << Person2.Name << endl;
    }
    };



  • Namenloser324 schrieb:

    Heho, klar geht das.

    class Mensch
    {
    [...]//dein code
    void Dialog(Mensch Person2)
    {
    cout << "ich bin" << this->Name << endl;
    cout << "und der andere ist" << Person2.Name << endl;
    }
    };

    Dein Code funktioniert ja nur dann, wenn ich nur 2 Personen habe oder?

    p.s das ist ungefähr das gleiche wie ich im anderen Topic habe in dem du mir genatowrtet hast.

    Ich schreibe dir sonst dort zurück under erkläre die zusammenhänge^^

    kann geschlossen werden 😃

    Gruss nimda4


  • Mod

    Das kannst du auch leicht für beliebig viele Personen modifizieren. Hier mit typischem STL-Interface:

    #include <iostream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    class Mensch
    {
      string name;
      int alter;
    public:
      Mensch(string name, int alter):name(name), alter(alter) {}
      void sag_was(ostream &out)
      {
        out << "Hallo! Ich bin " << name << " und bin " << alter << " Jahre alt.\n";
      }
    };
    
    template <typename Iterator> void dialog(Iterator begin, Iterator end)
    {
      for (; begin != end; ++begin)
        begin->sag_was(cout);
    }
    
    int main()
    {
      vector<Mensch> menschen;
      menschen.push_back(Mensch("Hans", 18));
      menschen.push_back(Mensch("Tina", 19));
      menschen.push_back(Mensch("Franz", 20));
    
      dialog(menschen.begin(), menschen.end());
    }
    


  • SeppJ schrieb:

    Das kannst du auch leicht für beliebig viele Personen modifizieren. Hier mit typischem STL-Interface:

    #include <iostream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    class Mensch
    {
      string name;
      int alter;
    public:
      Mensch(string name, int alter):name(name), alter(alter) {}
      void sag_was(ostream &out)
      {
        out << "Hallo! Ich bin " << name << " und bin " << alter << " Jahre alt.\n";
      }
    };
    
    template <typename Iterator> void dialog(Iterator begin, Iterator end)
    {
      for (; begin != end; ++begin)
        begin->sag_was(cout);
    }
    
    int main()
    {
      vector<Mensch> menschen;
      menschen.push_back(Mensch("Hans", 18));
      menschen.push_back(Mensch("Tina", 19));
      menschen.push_back(Mensch("Franz", 20));
    
      dialog(menschen.begin(), menschen.end());
    }
    

    wow Danke!
    Das das so funktioniert ist ja hammer *___*

    Ich hab das jetzt angepasst jedoch stellt sich jetzt noch die Frage wie sich die dann trennen bzw wie ich die Methode nun so anpasse das ich Ihre werte dann verwenden kann (in der Klasse):

    Nemen wir an ich habe jetzt die 2 Menschen Hans und Tina erstellt mit ihrem Alter.

    Die Methode kampf soll ungefähr so aussehen:

    [cpp] 
    void kampf()
    {
       if(alterHans<=alterTina)
       {
          cout<<"Hans ist jünger als Tina";    
       }
       else
       {
          cout <<"Hans ist älter als Tina";
       }
    }[/cpp]
    

    Wie kann ich jetzt alterHans oder alterTina ansprechen(in der Klasse)?
    Und wenn sie beim nächsten mal nicht Tina oder Hans heissen wie kann ich machen das diese automatisch geändert werden.

    Gruss

    Nimda4


  • Mod

    Das ist Grundlage jeder Funktion. Die beteiligten Objekte übergibst du als Funktionsparameter. Falls die Funktion eine Memberfunktion ist, dann ist eines der beteiligten Objekte schon implizit das *this-Objekt. Auf die Eigenschaften der Objekte kannst du dann über deren öffentliches Interface zugreifen oder bei Memberfunktionen auch über das private.

    Die Frage ob freie Funktion oder Memberfunktion sollte modellierungstechnisch, nicht nach Faulheit bei der Programmierung beantwortet werden. Ist kampf() als ein Kampf zwischen zwei Personen anzusehen, dann ist es eher eine freie Funktion. Ist kampf() eher so zu verstehen, dass ein Objekt handelnd gegen ein anderes kämpft, dann ist es eher eine Memberfunktion.



  • Villeichst solltest du dir mal ein C++-Buch zulegen 😉 Dann wäre dir vieles klarer, vor allem diese grundlegenden Dinge.

    Der Kerl über mir hat sogar den richtigen Link dafür in seiner Sig 🙂



  • cvcv schrieb:

    Villeichst solltest du dir mal ein C++-Buch zulegen 😉 Dann wäre dir vieles klarer, vor allem diese grundlegenden Dinge.

    Der Kerl über mir hat sogar den richtigen Link dafür in seiner Sig 🙂

    Werde mir nun ein Buch besorgen und mein Wissen erweitern.

    Vielen Dank für eure Hilfe, ich werde trotzdem noch an meinem jetzigen Prog weiter Arbeiten und mich wieder melden wenn ich weitere Fragen habe 😃

    Gruss

    Nimda4


Anmelden zum Antworten