Klassen..



  • Moonfire schrieb:

    hi 😃

    ich würde gerne eine eigene Klasse schreiben,doch kein Plan von dieser Struktur ^^

    Lies ein Tutorial: tutorial.schornboeck.net

    .. dann gibts da noch eine funktion oder was auch immer,die das hier macht:

    apfel.same_isbn(); //keine Ahnung wozu das gut ist,ist aber in der Klasse reinintepretiert worden
    

    Ich nehme an, sie vergleicht die ISBN - Nr. der Klasse mit der ISBN einer anderen. Daher denke ich, dass apfel.same_isbn(birne); eher wahrscheinlich ist. Zumindest beim jetzigen Informationsstand.

    P.s.: Im Buch steht,dass ich den Downloadlink von Sales_item.h auf folgender Seite herunterladen kann:
    http://www.awprofessional.com/cpp_primer
    Aber es funktioniert nicht,deswegen bräuchte ich von euch Hilfe,bitte

    Wtf? Klar geht das. Probier mal den Link: http://www.awprofessional.com/content/images/0201721481/sourcecode/MS_files.zip

    /*
     * This file contains code from "C++ Primer, Fourth Edition", by Stanley B.
     * Lippman, Jose Lajoie, and Barbara E. Moo, and is covered under the
     * copyright and warranty notices given in that book:
     * 
     * "Copyright (c) 2005 by Objectwrite, Inc., Jose Lajoie, and Barbara E. Moo."
     * 
     * 
     * "The authors and publisher have taken care in the preparation of this book,
     * but make no expressed or implied warranty of any kind and assume no
     * responsibility for errors or omissions. No liability is assumed for
     * incidental or consequential damages in connection with or arising out of the
     * use of the information or programs contained herein."
     * 
     * Permission is granted for this code to be used for educational purposes in
     * association with the book, given proper citation if and when posted or
     * reproduced.Any commercial use of this code requires the explicit written
     * permission of the publisher, Addison-Wesley Professional, a division of
     * Pearson Education, Inc. Send your request for permission, stating clearly
     * what code you would like to use, and in what specific way, to the following
     * address: 
     * 
     * 	Pearson Education, Inc.
     * 	Rights and Contracts Department
     * 	75 Arlington Street, Suite 300
     * 	Boston, MA 02216
     * 	Fax: (617) 848-7047
    */ 
    
    #ifndef SALESITEM_H
    #define SALESITEM_H
    
    // Definition of Sales_item class and related functions goes here
    
    #include <iostream>
    #include <string>
    
    class Sales_item {
    friend bool operator==(const Sales_item&, const Sales_item&);
    // other members as before
    public:
        // added constructors to initialize from a string or an istream
        Sales_item(const std::string &book):
                  isbn(book), units_sold(0), revenue(0.0) { }
        Sales_item(std::istream &is) { is >> *this; }
        friend std::istream& operator>>(std::istream&, Sales_item&);
        friend std::ostream& operator<<(std::ostream&, const Sales_item&);
    public:
        // operations on Sales_item objects
        // member binary operator: left-hand operand bound to implicit this pointer
        Sales_item& operator+=(const Sales_item&);
        // other members as before
    
    public:
        // operations on Sales_item objects
        double avg_price() const;
        bool same_isbn(const Sales_item &rhs) const
            { return isbn == rhs.isbn; }
        // default constructor needed to initialize members of built-in type
        Sales_item(): units_sold(0), revenue(0.0) { }
    // private members as before
    private:
        std::string isbn;
        unsigned units_sold;
        double revenue;
    
    };
    
    // nonmember binary operator: must declare a parameter for each operand
    Sales_item operator+(const Sales_item&, const Sales_item&);
    
    inline bool 
    operator==(const Sales_item &lhs, const Sales_item &rhs)
    {
        // must be made a friend of Sales_item
        return lhs.units_sold == rhs.units_sold &&
               lhs.revenue == rhs.revenue &&
    	   lhs.same_isbn(rhs);
    }
    
    inline bool 
    operator!=(const Sales_item &lhs, const Sales_item &rhs)
    {
        return !(lhs == rhs); // != defined in terms of operator==
    }
    
    using std::istream; using std::ostream;
    
    // assumes that both objects refer to the same isbn
    inline
    Sales_item& Sales_item::operator+=(const Sales_item& rhs) 
    {
        units_sold += rhs.units_sold; 
        revenue += rhs.revenue; 
        return *this;
    }
    
    // assumes that both objects refer to the same isbn
    inline
    Sales_item 
    operator+(const Sales_item& lhs, const Sales_item& rhs) 
    {
        Sales_item ret(lhs);  // copy lhs into a local object that we'll return
        ret += rhs;           // add in the contents of rhs 
        return ret;           // return ret by value
    }
    
    inline
    istream& 
    operator>>(istream& in, Sales_item& s)
    {
        double price;
        in >> s.isbn >> s.units_sold >> price;
        // check that the inputs succeeded
        if (in)
            s.revenue = s.units_sold * price;
        else 
            s = Sales_item();  // input failed: reset object to default state
        return in;
    }
    
    inline
    ostream& 
    operator<<(ostream& out, const Sales_item& s)
    {
        out << s.isbn << "\t" << s.units_sold << "\t" 
            << s.revenue << "\t" <<  s.avg_price();
        return out;
    }
    
    inline
    double Sales_item::avg_price() const
    {
        if (units_sold) 
            return revenue/units_sold; 
        else 
            return 0;
    }
    
    #endif
    

    @Dj_KoLoGe
    Dein Code wird nicht kompilieren.

    MfG

    GPC



  • [quote="GPC"]

    Moonfire schrieb:

    @Dj_KoLoGe
    Dein Code wird nicht kompilieren.

    wieso nicht? hab jetz lange kein c++ mehr gemacht aber müste doch alles stimmen???



  • Naja, zumindest die Definitionen vom Konstruktor und vom Destruktor fehlen.



  • Naja, zumindest die Definitionen vom Konstruktor und vom Destruktor fehlen.

    Es ist egal, ob man den Konstruktor / Destruktor definiert oder nicht ... Vielmehr stört mich diese Tatsache:

    class Sale_item()
    

    😉 Das müsste jedem C++ler als erstes auffallen.

    MfG mikey.



  • Danke GPC 😉

    aber wo kann ich denn selber lernen solche Klassen wie "sales_item" oder sonstige zu programmieren?
    Das ist sicherlich schwer,wenn man es nicht kann,aber was sollst 😃



  • mikey schrieb:

    Naja, zumindest die Definitionen vom Konstruktor und vom Destruktor fehlen.

    Es ist egal, ob man den Konstruktor / Destruktor definiert oder nicht ... Vielmehr stört mich diese Tatsache:

    class Sale_item()
    

    😉 Das müsste jedem C++ler als erstes auffallen.

    MfG mikey.

    stimmt 🙄
    war wohl zu spät ^^



  • Moonfire schrieb:

    Danke GPC 😉

    aber wo kann ich denn selber lernen solche Klassen wie "sales_item" oder sonstige zu programmieren?

    Buch oder Tutorial. Wenn ich es richtig verstanden habe, liest du doch gerade ein Buch?! Darin wird normalerweise das Erstellen von Klassen gelehrt. Zuerst mit kleinen Beispielen und dann immer komplexer.

    Das C++ Primer ist imo ein gutes Buch. Auch nicht soo schlecht ist "C++ Lernen und Professionell" anwenden.

    Ansonsten ein Tutorial lesen: http://tutorial.schornboeck.net/inhalt.htm

    Oder das hier: http://www.volkard.de/vcppkold/inhalt.html
    Bei dem Tutorial schreibt volkard noch #include <iostream.h>, das macht man nicht mehr so, sondern einfach #include <iostream>
    Das void main ist auch nicht korrekt, es muss int main heißen. Aber na ja, der Kurs ist schon älter und der neue ( http://www.volkard.de/Cpp/Tutorial/Grundlagen/index.html ) ist noch nicht so umfangreich.

    MfG

    GPC



  • mikey schrieb:

    Naja, zumindest die Definitionen vom Konstruktor und vom Destruktor fehlen.

    Es ist egal, ob man den Konstruktor / Destruktor definiert oder nicht ...

    Wenn er vorher deklariert wurde, ist es sehr wohl von Bedeutung, ob er definiert wurde oder nicht. Hier nicht geschehen ➡ Linker findet Definition nicht ➡ kompiliert nicht!



  • Linker findet Definition nicht kompiliert nicht!

    Kompiliert schon ! :p

    Und was wäre dann mit Funktionsprototypen die nicht definiert werden !? Deiner Aussage nach müssten die dann auch einen Linkererror verursachen, was aber nicht der Fall ist.



  • mikey schrieb:

    Linker findet Definition nicht kompiliert nicht!

    Kompiliert schon ! :p

    Und was wäre dann mit Funktionsprototypen die nicht definiert werden !? Deiner Aussage nach müssten die dann auch einen Linkererror verursachen, was aber nicht der Fall ist.

    Tun sie, wenn du versuchst sie aufzurufen.



  • Das stimmt. Aber jetzt verstehe ich das mit dem Konstruktor nicht mehr:

    Beim Erzeugen der Klasse wird doch der Konstruktor aufgerufen. Wenn er nur als Prototyp existiert, dann müsste es theoretisch einen Fehler geben. Aber alles wird normal kompiliert ?! Jemand 'ne Idee?



  • mikey schrieb:

    Das stimmt. Aber jetzt verstehe ich das mit dem Konstruktor nicht mehr:

    Beim Erzeugen der Klasse wird doch der Konstruktor aufgerufen. Wenn er nur als Prototyp existiert, dann müsste es theoretisch einen Fehler geben. Aber alles wird normal kompiliert ?! Jemand 'ne Idee?

    Der Compiler erzeugt ja default Implementierungen vom Ctor/Dtor/CCtor/=op . So, wenn du jetzt aber explizit hinschreibst, dass du einen eigenen Ctor willst (=deklaration des Ctors), dann erzeugt der Compiler keinen Default-Ctor mehr.
    Und wenn du jetzt versäumst, den Ctor auch zu definieren, findet der Linker die Definition auch nicht.

    MfG

    GPC



  • Und ich hatte schon ein neues Thema dazu (Konstruktor/Destruktor deklariert aber nicht definiert) aufgemacht, lol.

    Gut, dass es jetzt hier beantwortet wurde


Anmelden zum Antworten