Alles in Klassen stecken?



  • Was denn? Polymorphie und Vererbung bekommt man auch hin.



  • richtigstellung schrieb:

    kann man sich auch in C objektorientierten Code schreiben

    Das ist einfach eine Behauptung, die falsch ist.
    Das Gefrickel mit structs ist eine Möglichkeit Klassen nachzumodelieren.
    Objektorientierung umfasst aber eine Menge mehr.

    Aha, was denn, was man Deiner Meinung nach mit C nicht hinbekommt? Da bin ich ja mal gespannt!



  • tntnet schrieb:

    Übrigens: zählst Du Oop nicht zur strukturierten Programmierung 😕 ? Dann wäre Oop ja unstrukturiert 😃 .

    ich sag ja, ich muss nen kommunikationskurs machen..
    oop ist eher nen aufsatz auf die strukturierte programmierung, ums noch ordentlicher und für laien noch verwirrender zu machen ^^



  • richtigstellung schrieb:

    kann man sich auch in C objektorientierten Code schreiben

    Das ist einfach eine Behauptung, die falsch ist.
    Das Gefrickel mit structs ist eine Möglichkeit Klassen nachzumodelieren.
    Objektorientierung umfasst aber eine Menge mehr.

    jetzt sag aber nicht, dass structs noch funktionen enthalten sollten.
    🙂



  • was ist das schrieb:

    http://www.ddj.com/cpp/184401197 schrieb:

    else if (f needs type conversions
    on its left-most argument)
    {

    Was soll das sein?
    Kann mal einen Beispielcode für f needs type conversions on its left-most argument schreiben?

    Wir schreiben einfach mal eine Klasse für komplexe Zahlen (ja, die gibt es schon in der Standardbibliothek, aber ein besseres Beispiel fällt mir gerade nicht ein):

    class Complex
    {
        public:
            Complex(double real, double imaginary = 0.0) //erlaubt Konvertierung von einfachen doubles zu Komplexen Zahlen
                 : re(real), im(imaginary)
            {}
            Complex& operator+=(Complex const& rhs)
            {
                re += rhs.re;
                im += rhs.im;
                return *this;
            }
            //erste Möglichkeit zur Implementierung der (normalen) Addition
            Complex operator+(Complex const& rhs) const
            {
                 Complex result = *this;
                 result += rhs;
                 return result;
            }
        private:
            double re, im;
    };
    

    Wenn man jetzt diesen Code kompilieren will:

    int main()
    {
        Complex a(1.0,1.0), b(2.0,3.0);
        Complex c = a + b;
        Complex d = a + 1.0;
        Complex e = 1.0 + a;
    }
    

    Kriegt man folgenden Fehler

    error: no operator "+" matches these operands
           operand types are: double + Complex
          Complex e = 1.0 + a;
    

    Das liegt daran, dass man keine Standardkonvertierungen benutzen und dann auf das Resultat eine Methode anwenden kann. Schreibt man die Addition jetzt aber so:

    class Complex
    {
        public:
            Complex(double real, double imaginary = 0.0) //erlaubt Konvertierung von einfachen doubles zu Komplexen Zahlen
                 : re(real), im(imaginary)
            {}
            Complex& operator+=(Complex const& rhs)
            {
                re += rhs.re;
                im += rhs.im;
                return *this;
            }
        private:
            double re, im;
    };
    
    //Zweite Möglichkeit zur Implementierung der (einfachen) Addition
    Complex operator+(Complex const& lhs, Complex const& rhs)
    {
        Complex result = lhs;
        result += rhs;
        return result;
    }
    

    dann funktioniert der obige Code, weil man mit Standardkonvertierungen den double zu einem Complex umwandeln und das Resultat an eine const-Referenz binden kann. Weil man eben gerne diese Symmetrie hat, das sowohl double+Complex, als auch Complex+double funktionieren, ist es besser solche Operatoren, bei denen man für das linke Argument Konvertierungen erlauben will als (globale) non-member Funktionen zu schreiben.

    Felix



  • Walli schrieb:

    richtigstellung schrieb:

    kann man sich auch in C objektorientierten Code schreiben

    Das ist einfach eine Behauptung, die falsch ist.
    Das Gefrickel mit structs ist eine Möglichkeit Klassen nachzumodelieren.
    Objektorientierung umfasst aber eine Menge mehr.

    Aha, was denn, was man Deiner Meinung nach mit C nicht hinbekommt? Da bin ich ja mal gespannt!

    Das ist mit der Zeit richtig nervig Leute mal zum lesen zu animieren.
    🙄
    http://de.wikipedia.org/wiki/Objektorientierung



  • Richtigsteller schrieb:

    Walli schrieb:

    richtigstellung schrieb:

    kann man sich auch in C objektorientierten Code schreiben

    Das ist einfach eine Behauptung, die falsch ist.
    Das Gefrickel mit structs ist eine Möglichkeit Klassen nachzumodelieren.
    Objektorientierung umfasst aber eine Menge mehr.

    Aha, was denn, was man Deiner Meinung nach mit C nicht hinbekommt? Da bin ich ja mal gespannt!

    Das ist mit der Zeit richtig nervig Leute mal zum lesen zu animieren.
    🙄
    http://de.wikipedia.org/wiki/Objektorientierung

    ich glaube nicht, dass er damit meinte, das C polymorphie, vererbung und krams unterstützt. er meinte, dass man jeden algorithmus den man in c++ implementieren kann auch in C implementieren kann und jedes problem welches man mit C++ lösen kann, man auch mit C lösen kann und man auch mit C durchaus ansatzweise objektorientiert programmieren kann, wie es auch mit assembler funktioniert 😉



  • Richtigsteller schrieb:

    Das ist mit der Zeit richtig nervig Leute mal zum lesen zu animieren.
    🙄
    http://de.wikipedia.org/wiki/Objektorientierung

    Viel nerviger ist es die Leute zum verstehen zu animieren.



  • Man kriegt auch alles in Assembler umgesetzt. Fragt sich nur, mit welchem Aufwand? Welche Wartungsfreundlichkeit? Selbst mit Lohckkarten wird man sicherlich alles umsetzen können. Aber ich nimm halt doch lieber Tastatur und Bildschirm. Genauso wie ich lieber C++ anstatt C nehme. 😉



  • BarnieGeroellheimer schrieb:

    Man kriegt auch alles in Assembler umgesetzt. Fragt sich nur, mit welchem Aufwand? Welche Wartungsfreundlichkeit? Selbst mit Lohckkarten wird man sicherlich alles umsetzen können. Aber ich nimm halt doch lieber Tastatur und Bildschirm. Genauso wie ich lieber C++ anstatt C nehme. 😉

    um aufwand ging es ja jetzt nicht 🙂



  • Wie bekommt man in C Datenkapselung hin, außer nen Kommentar, //auf x nur mit foo() zugreifen, zu schreiben?



  • Im öffentlichen Teil:

    typedef struct Object* ObjectHandle;
    

    Im privaten Teil:

    struct Object
    {
        /* ... */
    };
    

    Funktionen arbeiten mit einem ObjectHandle. Von außen kann nicht auf die internen Member von Object zugegriffen werden.



  • BarnieGeroellheimer schrieb:

    Genauso wie ich lieber C++ anstatt C nehme.

    vom regen in die traufe, oder wie meinst du das?
    🙂


Anmelden zum Antworten