* überladen



  • was spricht gegen eine aussagekräftige methode?

    @shade
    jetzt hast du dich ja selber zitiert, mir war schon klar das er es nicht lesen würde.



  • geht das nur mit operatorenüberladung nicht?



  • Overload schrieb:

    geht das nur mit operatorenüberladung nicht?

    doch natürlich, aber es ein frage des sinnes bzw. des stils, wie shade schon
    gesagt hat.



  • Wenn Du unbedingt willst:

    #include <iostream>
    
    using namespace std;
    
    template <typename T>
    class confusion
    {
    public:
           confusion(T value):m_value(value){}
    
           confusion<T> operator*(confusion c)
           {
                  return confusion<T>( (m_value-.16*m_value) * (c.m_value-.16*c.m_value) );
           }
    
           friend ostream& operator<<(ostream &stream, confusion conf)
           {
                  return stream<<conf.m_value;
           }
    
    private:
            T m_value;
    };
    
    int main(int argc, char *argv[])
    {   
        confusion<double> a(10),b(5);
    
        cout<<a*b<<endl;    
        cout<< (10-10*.16) * (5-5*.16) <<endl;
    
        system("PAUSE");
    }
    


  • Oder besser so:

    template <typename T>
    class confusion
    {
    public:
           confusion(T value):m_value(value){}
    
           confusion<T> operator*(const confusion<T> &c) const
           {
                  return confusion<T>( (m_value-.16*m_value) * (c.m_value-.16*c.m_value) );
           }
    
           friend ostream& operator<<(ostream &stream, const confusion<T> &conf)
           {
                  return stream<<conf.m_value;
           }
    
    private:
            T m_value;
    };
    


  • Ich finds eigentlich sinnvoller, binäre Operatoren nicht als member zu implementieren. Ich denke

    #include <ostream>
    
    template <typename T>
    class confusion
    {
    public:
      confusion(T value) : m_value(value){}
    
      inline T const &get_value() const { return m_value; }
    
    private:
      T m_value;
    };
    
    template<typename T> 
    confusion<T> operator*(confusion<T> const &c, confusion<T> const &d) {
      return confusion<T>((c.get_value() - .16 * c.get_value()) *
                          (d.get_value() - .16 * d.get_value()));
    }
    
    template<typename T>
    std::ostream &operator<<(std::ostream &out, confusion<T> const &c) {
      return out << c.get_value();
    }
    

    wär da schöner.



  • super..vielen dank



  • Hallo leute....

    suche Erläuterung für : using namespace std:

    suche Erläuterung für : system("Pause");

    Ich bin eigentlich C-Programmierer und weiss im Moment nicht genau,
    was diese Zeilen bedeuten....

    würd mich über eine Erklärung freuen....



  • einen neuen thread zu eröffnen wäre besser gewesen

    1.) http://tutorial.schornboeck.net/namespace.htm
    2.) ruft einen systembefehl auf, in diesem fall pause 😃



  • tutorial.schornbeck.net schrieb:

    Man kann alle Operatoren überladen: &&, ||, , ->,... Ausnahmen sind: -> und ,

    Man kann ->* und , durchaus überladen! Ausnahmen sind: ., .*, :: und sizeof !



  • sizeof weiß ich nicht. Man darf aber auch ?: nicht überladen (nur so als Ergänzung).



  • sizeof darf nicht überladen werden, da c++ das intern zur bestimmung der exakten größe des typs braucht(soweit ich weis, arbeitet zb new damit), eine überladung die nicht die exakte größe zurückgeben würde wäre fatal.


Anmelden zum Antworten