Struct in Vector speichern



  • asc schrieb:

    Entweder verwendest du einen Vektor auf Zeiger oder Objekte

    Warum? Geht doch:

    #include <iostream>
    #include <vector>
    
    struct Person
    {
    	Person(const std::string ctorName) :
    		name(ctorName) { }
    
    	std::string name;
    };
    
    int main()
    {
    	Person *person = new Person("Pedda");
    
    	std::vector<Person> personenVec;
    
    	personenVec.push_back(*person);
    
        delete person;
    
    	std::cin.get();
    }
    


  • Danke mit *p funktioniert es. Ich hätte schwören können, dass ich das bereits probiert habe... 😉



  • Kóyaánasqatsi schrieb:

    asc schrieb:

    Entweder verwendest du einen Vektor auf Zeiger oder Objekte

    Warum? Geht doch:

    Verwirr hier bitte niemanden. Das mischen geht weiterhin nicht (Ohne Dereferenzierung Zeiger einen Objekt, oder Objekt einem Zeiger zuweisen).



  • asc schrieb:

    und "processes" enthält Objekte.
    ...
    Entweder verwendest du einen Vektor auf Zeiger oder Objekte

    Ich will nur erwähnen, dass Du scheinbar unter "Objekt" etwas anderes verstehst als der C++ Standard. Es gibt auch Objekte von anderen (nicht-Klassen) Typen (int, void*, double, bool(*)(int), ...).

    Gruß,
    SP



  • Sebastian Pizer schrieb:

    Ich will nur erwähnen, dass Du scheinbar unter "Objekt" etwas anderes verstehst als der C++ Standard...

    Die Kritik nehme ich an, wenn auch nicht Kritiklos: Noch kein einziger in meiner gesamten Berufslaufbahn (überwiegend C++, bei mehr als 10 Jahre Berufserfahrung) hat den Begriff Objekt, in den Gebrauch des C++ Standards, sondern eher bezogen auf die Objektorientierte Programmierung (Instanz einer Klasse) verwendet. Es gibt bei mir eine Grenze bei der mir der Standard abgeht: Und zwar wenn der Sprachgebrauch im Programmierbereich in 90%+ der Fälle etwas anderes besagt. Vielleicht liegt es auch daran das ich nicht im Lehrbereich tätig bin...



  • asc, das hast du auch gesagt, als ich dich auf die Terminologie von "konstanten Referenzen" hingewiesen habe. Hier im Forum nehmen wir es halt gerne etwas genau... 😉



  • asc schrieb:

    sondern eher bezogen auf die Objektorientierte Programmierung (Instanz einer Klasse) verwendet.

    Einspruch. Objektorientierte Programmierung heißt vermutlich nicht, daß man alles in Klassen stopft.

    asc schrieb:

    Vielleicht liegt es auch daran das ich nicht im Lehrbereich tätig bin...

    Der Lehrbereich hinkt dem Geschehen meist viele Jahre hinterher.



  • volkard schrieb:

    asc schrieb:

    sondern eher bezogen auf die Objektorientierte Programmierung (Instanz einer Klasse) verwendet.

    Einspruch. Objektorientierte Programmierung heißt vermutlich nicht, daß man alles in Klassen stopft.

    Ansichtssache. Ich denke nicht so, aber mein Prof tut das auch so. OO sind Klassen, Vererbung, Polymorphie, Generik. (siehe Eiffel -> alles ist eine Klasse).



  • Hauptsache, es führt nicht zu sowas wie

    Objektorientiert:

    struct Matrix{
       float** data;
    };
    void invertiere(Matrix m){
       //gauss
    }
    

    Nicht objektorientiert:

    typedef float** Matrix;
    
    void invertiere(Matrix m){
       //gauss
    }
    


  • ^^
    Oder noch schlimmer.

    class Math
    {
     public:
     float sin ( float x );
     float cos ( float x );
     //...
    };
    
    class uses_math : public Math
    {
     public:
     void bar ()
     {
       float x = sin ( 0.5f );
     }
    };
    


  • drakon schrieb:

    Generik

    Neues Wort?



  • volkard schrieb:

    drakon schrieb:

    Generik

    Neues Wort?

    Öhh, nö?
    http://de.wikipedia.org/wiki/Generik



  • drakon schrieb:

    volkard schrieb:

    drakon schrieb:

    Generik

    Neues Wort?

    Öhh, nö?
    http://de.wikipedia.org/wiki/Generik

    Öhm doch!
    http://de.wikipedia.org/w/index.php?title=Generizität&redirect=no
    (Ist doch nur Wikipedia und kein Lexikon)



  • Ich weiss jetzt nicht genau, was du mir damit sagen willst, aber lies doch mal den Artikel:

    Die Implementierung erfolgt bei einigen Programmiersprachen durch das Konzept generischer Typen bzw. Templates – so gestalten sich dynamische Programmiersprachen, bei denen sich der Typ einer Variable zur Laufzeit ändern darf, durch ihre verallgemeinerte Polymorphie generisch. Von Sprachen, die solche Mechanismen bieten, sagt man auch, dass sie Generik erlauben.

    Das Wort ist weder von mir erfunden, noch äusserst unbekannt.



  • Verstehe, Generik für sie Sprache, Generizität für die Funktionen. Das geht.



  • asc schrieb:

    Sebastian Pizer schrieb:

    Ich will nur erwähnen, dass Du scheinbar unter "Objekt" etwas anderes verstehst als der C++ Standard...

    Die Kritik nehme ich an, wenn auch nicht Kritiklos: Noch kein einziger in meiner gesamten Berufslaufbahn (überwiegend C++, bei mehr als 10 Jahre Berufserfahrung) hat den Begriff Objekt, in den Gebrauch des C++ Standards, sondern eher bezogen auf die Objektorientierte Programmierung (Instanz einer Klasse) verwendet. Es gibt bei mir eine Grenze bei der mir der Standard abgeht: Und zwar wenn der Sprachgebrauch im Programmierbereich in 90%+ der Fälle etwas anderes besagt. Vielleicht liegt es auch daran das ich nicht im Lehrbereich tätig bin...

    Ich seh das genauso wie du. Objekte sind für mich Instanzen von Klassen... das die ewig gestrigen Theoretiker und Papierprogrammierer das anders sehen und der Standard vielleicht auch, mag so sein, ist mir persönlich aber schnuppe 😉

    Ganz ehrlich: mir gehen diese absolut sinnlosen Theorie-Diskussionen auf den Keks... Programmieren ist Praxis. Man kann 30 Seiten drüber schreiben, was man genau als Objekt betrachtet, oder man geht hin und baut einfach eins und benutzt es auf die schmutzigste und versauteste Art und Weise! Benutz mich, du Sau! 😛

    Entschuldigt meine Ansichten, aber ich hab eine angeborene Abneigung gegenüber Theoretikern...



  • It0101 schrieb:

    Ich seh das genauso wie du. Objekte sind für mich Instanzen von Klassen... das die ewig gestrigen Theoretiker und Papierprogrammierer das anders sehen und der Standard vielleicht auch, mag so sein, ist mir persönlich aber schnuppe 😉

    Also ein Objekt ist ein Ding, mit dem ich Sachen machen kann, egal ob das Ding nun ein HugeInteger oder ein int ist, egal, ob char oder string.

    It0101 schrieb:

    Ganz ehrlich: mir gehen diese absolut sinnlosen Theorie-Diskussionen auf den Keks... Programmieren ist Praxis. Man kann 30 Seiten drüber schreiben, was man genau als Objekt betrachtet, oder man geht hin und baut einfach eins und benutzt es auf die schmutzigste und versauteste Art und Weise! Benutz mich, du Sau! 😛

    Ganz ehrlich: Du beziehst Deine "Objekt"-Definition von solchen Sprachen, wo alle Klassen von der Zauberklasse "Object" erben. Aber das ist in C++ doch gar nicht angemessen. Einfach falscher Kontext. Wir haben die Object-Klasse nicht.
    Das ist töricht und widerspricht genau Deiner Benutz-Mich-Theorie. In C++ nimmt man sich einfach ein Objekt und benutzt es und muß gar nicht drüber nachdenken, aus welcher Klasse es kommt oder ob es überhaupt Instanz einer Klasse ist. Einfach nur benutzen.
    Und es schadet nicht, sich dessen im Klaren zu sein. Programmieren könnt ihr auch so. Jahrelang. Aber in Diskussionen werden ihr immer auffallen, wenn ihr regionales Vokabular pflegt. Man wird vielleicht denken, daß ihr nicht regelmäßig C++-Bücher lest und das wollen wir doch nicht.



  • volkard schrieb:

    ...Aber in Diskussionen werden ihr immer auffallen, wenn ihr regionales Vokabular pflegt...

    Stimmt, sehr regionales Vokabular (Hessen, Bayern, NRW...). Und in der Praxis kenne ich nur wenige Firmen mit mehr als 10 Entwicklern die nur C++ verwenden, und selbst in reinen C++ Firmen entsprach bisher der Wortschatz nicht dem aus dem C++ Standard. Mag vielleicht sein das sich der Sprachgebrauch teilweise vor dem Standard entwickelt hat.

    volkard schrieb:

    Ganz ehrlich: Du beziehst Deine "Objekt"-Definition von solchen Sprachen, wo alle Klassen von der Zauberklasse "Object" erben.

    Merkwürdig, das ich diese "Interpretation" schon aus Zeiten kenne, wo ich noch nicht mit reinen OO-Sprachen zu tun hatte (C++ kam bei mir deutlich vor Java, C# und Co - und auch noch vor dem Standard). Und mag sein das alle bisherigen Firmen zufälligerweise den gleichen (unabhängig vom Bundesland) "regionalen" Sprachgebrauch hatten.



  • Also ein Objekt ist ein Ding, mit dem ich Sachen machen kann, egal ob das Ding nun ein HugeInteger oder ein int ist, egal, ob char oder string.

    Also zwischen int und std::string ist bzgl. der "Sachen machen" ein riesiger Unterschied... aber prinzipiell gebe ich dir insofern recht, dass man mit allen diesen Dingen etwas tun kann. Wenn das deine Definition von einem Objekt ist, ist sie berechtigt. Ich definiere sie anders, weil ich int und char und co. nicht als Objekt sehe... Für mich sind das Basis-datentypen ( also float, double, int, long, char, short, etc. ).

    Diese unterscheiden sich aus meiner Sicht genau dadurch von Instanzen von Klassen, dass man sie bei der Übergabe in Funktionen nicht mit const-Referenz übergibt, sondern normal. Zumindest mach ich sowas nicht:

    void Foobar( const int &IntegerWert )
    {
    ...
    }
    

    Mit std::string mach ich das allerdings schon:

    void Foobar( const std::string &StringObjekt )
    {
    ...
    }
    

    so jetzt habt ihr ne greifbare Definition von Objekten 😉



  • Also ein Objekt ist ein Ding, mit dem ich Sachen machen kann, egal ob das Ding nun ein HugeInteger oder ein int ist, egal, ob char oder string .
    (Hinweis: int und char sind keine Klassen, HugeInteger und string sind Klassen.)


Anmelden zum Antworten