Struct in Vector speichern



  • 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.)



  • It0101 schrieb:

    so jetzt habt ihr ne greifbare Definition von Objekten 😉

    Die war schon klar.

    It0101 schrieb:

    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.

    Erstens: Und was machst Du mit bekanntermaßen kleinen Sachen wie std::pair<char,char>? Oder mit Digit (erst im Handbuch nachschlagen, ob's ein enum, typedef auf nicht-klassen-instanz oder struct/class ist)?

    It0101 schrieb:

    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.

    Zweitens: Ja, benutz einfach Instanzen von Klassen statt Objekten, wenn Du Instanzen von Klassen meinst, und alles ist ok.



  • volkard schrieb:

    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.)

    das erwähntest du bereits.

    sag mir doch mal, lieber Volkard:

    Übergibst du int und float als Const-Referenz?
    Behandelst du sie genauso wie Instanzen von Klassen?

    Wenn ja, warum?
    Wenn nein, warum?

    ich behandele sie nicht gleich, weil sie nicht das gleiche sind.



  • 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: ... so jetzt habt ihr ne greifbare Definition von Objekten

    Eine ziemlich bescheuerte Definition, das am Uebergabeverhalten festzumachen.

    Übergibst du int und float als Const-Referenz?

    Manchmal sogar ohne das Const. Aber mal ehrlich: Alles was klein ist, darf kein Objekt sein, nur weil ich es nicht als Const-Referenz uebergebe?



  • It0101 schrieb:

    Übergibst du int und float als Const-Referenz?

    Natürlich, nämlich gelegentlich in Templates.

    It0101 schrieb:

    Behandelst du sie genauso wie Instanzen von Klassen?

    Umgekehrt! Ich baue Klassen, daß sie sich wie int und double anfühlen.

    It0101 schrieb:

    Wenn ja, warum?

    Weniger Handbuchnotwendigkeit. Jeder kennt ints und jeder erwartet Klassen, die wie int gehen.

    It0101 schrieb:

    ich behandele sie nicht gleich, weil sie nicht das gleiche sind.

    Echt? Komisch. Die Unterschiede sind ja meist so irrelevant. Bei der Übergabe mal ein const& oder roh. Aber wenn ich diese Objekte in einen vector stopfen will, wo ist der Unterschied hin? Sie haben die richtige Kopiersemantik dazu also kann ich sie in den vector stopfen.



  • knivil schrieb:

    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: ... so jetzt habt ihr ne greifbare Definition von Objekten

    Eine ziemlich bescheuerte Definition, dass am Uebergabeverhalten festzumachen.

    weil?

    Ich versuche den Dingen Namen zu geben, die sich an der Praxis orientieren, also z.B. an den Unterschieden bzgl. der Anwendung.

    Ich halte doch keinen davon ab, weiterhin die Theorie im Standard anzubeten.



  • Echt? Komisch. Die Unterschiede sind ja meist so irrelevant.

    Sind sie das? Find ich nicht.

    Mit int verbinde ich das Speichern von ganzzahligen Werten.

    Klassen verwalten bei mir große Datenmengen, schreiben Logfiles, managen ganze Serverstrukturen... Natürlich ist nicht jede Klasse der Verwalter größerer Datenmengen, denn auch ich versuche Klassen nicht zu groß werden zu lassen, aber dennoch sind sie für mich mehr als nur ein int.


Anmelden zum Antworten