wie kann ich den + operator definieren?



  • wah, ohne vererbung? da kann ich doch gleich C programmieren ... :p



  • DEvent schrieb:

    wah, ohne vererbung? da kann ich doch gleich C programmieren ... :p

    Ha. Ertappt. Du versuchst also nur krampfhaft Vererbung einzubauen! 😉



  • interpreter schrieb:

    Ja eben. Genau deshalb fand ich ja dein Postings so sinnlos.

    wtf? Jetzt schön der Reihe nach, Freundchen: bin ich derjenige der die Frage: "Warum gibt op+ eine Referenz zurück?" gestellt hat, oder du? Denn mindestens beim dritten Durchlesen des ersten Postings hättest feststellen müssen, dass der Threadersteller mit einer abstrakten Klasse arbeitet...



  • interpreter schrieb:

    DEvent schrieb:

    wah, ohne vererbung? da kann ich doch gleich C programmieren ... :p

    Ha. Ertappt. Du versuchst also nur krampfhaft Vererbung einzubauen! 😉

    net krampfhaft, zumindest nicht im negativem sinne.
    weil wie gesagt, die idee war ein ADT zu machen für zahlen. und da will ich die ganzen operatoren nur für den interface Zahl definieren, so das alle anderen Zahlen ( Complexe Zahlen, Brüche, usw ) diese operatoren bereits haben. sie müssen nur noch add(), sub(), div(), usw neu definieren, damit man auch 2 komplexe zahlen richtig addiert, subtrahiert usw.
    rein theoretisch braucht man doch nur add, mul, kleiner, gleich um +, -, *, /, <, >, ==, !=, <=, >= zu implementieren.
    z.b. a - b durch a + (-1) * b
    * kann man ja auch duch + definieren
    und / durch -

    der andere weg wäre es die methoden add(), sub, div, equal, grössergleich() usw public zu machen, aber wozu hab ich in c++ die möglichkeit operatoren zu überladen ?

    oder sagt es einfach das man für eine abstrakte klasse wirklich keine möglichkeit besteht den operator + zu überladen. ich wollt halt wissen, ob ihr profis eine idee dazu habt. rumprobiert habe ich ja schon genug...



  • Shlo schrieb:

    interpreter schrieb:

    Ja eben. Genau deshalb fand ich ja dein Postings so sinnlos.

    wtf? Jetzt schön der Reihe nach, Freundchen: bin ich derjenige der die Frage: "Warum gibt op+ eine Referenz zurück?" gestellt hat, oder du? Denn mindestens beim dritten Durchlesen des ersten Postings hättest feststellen müssen, dass der Threadersteller mit einer abstrakten Klasse arbeitet...

    Und du hättest eigentlich bereits beim 1. Mal meines Postings merken können, dass das rhetorische Fragen waren.
    Wenn jemand so eine Klasse schreibt:

    class Person {
       public:
          string name;
          /* ... */
    };
    

    und jemand fragt, warum name public ist, dann will man nicht wissen, WARUM er das so macht sondern ihn darauf hinweisen, dass es schlecht ist. 🙂



  • Warum nicht einfach ein

    template <typename T>
    const T operator+(T const& lhs, T const& rhs)
    {
      T res(lhs);
      res += rhs;
      return res; 
    }
    

    Jetzt muß jede Klasse nur noch ein op+= mitbringen. Und es geht ohne gemeinsame Basisklasse, somit sind auch keine virtuellen Funktionen nötig und das ganze ist schön flott. Mußt den op+ nur in irgendeinen namespace packen, sonst könnte es zu Konflikten kommen.

    MfG Jester



  • das hab ich mir auch schon gedacht und vor 4 min implementiert.
    wie ruf ich das dann aber auf?

    z0, z2, z2 sind Bruch*
    *z0 = *z1 + *z2; wohin das <Bruch> ?
    ich hab sowas noch nie gemacht ...



  • das <Bruch> mußt Du garnicht angeben, weil der Compiler sich das herleiten kann.



  • interpreter schrieb:

    Und du hättest eigentlich bereits beim 1. Mal meines Postings merken können, dass das rhetorische Fragen waren.
    Wenn jemand so eine Klasse schreibt:
    und jemand fragt, warum name public ist, dann will man nicht wissen, WARUM er das so macht sondern ihn darauf hinweisen, dass es schlecht ist. 🙂

    Es gibt sicher gute Gründe warum ein Member public sein sollte, deshalb sind rhetorische Fragen solcher Art meistens mehrdeutig, genau wie deine...



  • das geht sogar
    find ich zwar nicht wirklich schön aber was solls.



  • Was ist daran nicht schön?

    Willst Du etwa immer nochmal dazuschreiben welchen Typ die beiden Operanden haben? Und wenn Du die Zahl-Klasse durch ne andere ersetzt an jedem Operator die Typen mitändern?



  • ich meine schöner wär es den operator der art zu implementieren:
    [pseudocode]
    Zahl operator+(Zahl left, Zahl right)
    [/pseudocode]
    also das nur die basisklasse angegeben wird



  • Warum ist das schöner???

    Es kostet mehr Laufzeit und ist nicht so flexibel, warum also ist es schöner?


Anmelden zum Antworten