Sales_item - ? Fragen



  • Hallo CodeFinder,

    ich habe schon meinen eins oberen Beitrag geschrieben.Nun kommt der 2-te Teil der Frage.Nähmlich:

    Was muss ich überhaupt in die datei.h reinschreiben?

    Mfg. Florian



  • @CodeFinder:

    CodeFinder schrieb:

    Wenn du in einer Cpp-Datei ein #include ... einfügst, kopiert der Compiler den gesamten Dateiinhalt der Headerdatei in die Cpp-Datei.(, die die Header inkludiert. 🤡 )

    Ne, nicht der Compiler sondern der Präprozessor.

    CodeFinder schrieb:

    Es ist wichtig, das man in eine Header bspw. keine Funktionsdefinitionen reinstellt, da es passieren kann, vorausgesetzt, man inkludiert die Header in mehere Cpp-Dateien (was ja aber eigentlich Sinn der Sache ist), dass dann in mehreren Cpp-Dateien die gleiche Funktionsdefinition vorliegt.

    Man benutzt auch Include-Guards

    CodeFinder schrieb:

    Aus diesem Grund stellt man in die Header nur eine Forward-Deklaration oder kurz: Prototyp, die Definitionen ansich liegen dann jedoch wieder in anderen Cpp-Dateien (s.g.: Definitionsdateien).

    Prototype != Forward-Declaration

    @florian m.:

    Bitte hör auf, uns du Siehzen! Ein du wirkt einfach wunder!

    florian m. schrieb:

    1. Eine Datei namens datei.cpp (als beispiel) erstellen und dort den Code reinschreiben bzw. normales int main() { } usw...

    Ok, lass uns das mal annehmen:

    main.cpp:

    int main( )
    {
    }
    

    Reicht völlig für ein minimal als C/C++ Quellcode kompilierbares Programm aus.

    florian m. schrieb:

    1. Auch eine neue Datei erstellen,die aber zum Beispiel test.h heisst,aber dort muss man .. irgendetwas reinschreiben(könnten Sie mir das bitte mit diesem Schritt da erklären?).

    So, jetzt wirds schwieriger. Was du dort "reinschreibst" hängt ganz davon ab, was du vorhast. Angenommen, du möchtest eine Klasse sales_item implementieren, dann überlegen wir uns mal, wie soetwas aussehen könnte:

    sales_item.h:

    #ifndef SALES_ITEM_INCLUDED
    #define SALES_ITEM_INCLUDED SALES_ITEM_INCLUDED
    
    #include <iostream>
    #include <string>
    
    class sales_item {
    
        friend std::ostream& operator<<( std::ostream &os, sales_item &d );
        friend std::istream& operator>>( std::istream &is, sales_item &d );
    
        private:
    
            bool           valid;
            unsigned long  id;
            std::string    name;
            std::string    desc;
            float          price;
            long           stock;
    
        public:
    
            sales_item( );
            sales_item( const sales_item &other );
            sales_item( unsigned long id, std::string name, std::string desc, float price, long stock = 0 );
            ~sales_item( );
    
            unsigned long get_id( );
            std::string get_name( );
            std::string get_desc( );
            float get_price( );
            long get_stock( );
            void set_id( unsigned long i );
            void set_name( std::string n );
            void set_desc( std::string d );
            void set_price( float p );
            void set_stock( long s );
            bool sell( long amount );
    };
    #endif /* SALES_ITEM_INCLUDED */
    

    Die Implementation:

    sales_item.cpp:

    #include "sales_item.h"
    
    std::ostream& operator<<( std::ostream &os, sales_item &d )
    {
        os << "Product ID:    " << d.id    << std::endl;
        os << "  Name:        " << d.name  << std::endl;
        os << "  Description: " << d.desc  << std::endl;
        os << "  Price:       " << d.price << std::endl;
        os << "  Stock:       " << d.stock << std::endl;
        return os;
    }
    
    std::istream& operator>>( std::istream &is, sales_item &d )
    {
        std::cout << "Product ID:    "; is >> d.id;
        std::cout << "  Name:        "; is >> d.name;
        std::cout << "  Description: "; is >> d.desc;
        std::cout << "  Price:       "; is >> d.price;
        std::cout << "  Stock:       "; is >> d.stock;
        return is;
    }
    
    sales_item::sales_item( ) : valid( false ), id( 0 ), name( "" ), desc( "" ), price( 0.0 ), stock( 0 )
    {
    }
    
    sales_item::sales_item( const sales_item &other )
    {
        valid = other.valid;
        id    = other.id;
        name  = other.id;
        desc  = other.desc;
        price = other.price;
        stock = other.stock;
    }
    
    sales_item::sales_item( unsigned long i, std::string n, std::string d, float p, long s )
    {
        valid = true;
        id    = i;
        name  = n;
        desc  = d;
        price = p;
        stock = s;
    }
    
    sales_item::~sales_item( )
    {
    }
    
    unsigned long sales_item::get_id( )
    {
        return id;
    }
    
    std::string sales_item::get_name( )
    {
        return name;
    }
    
    std::string sales_item::get_desc( )
    {
        return desc;
    }
    
    float sales_item::get_price( )
    {
        return price;
    }
    
    long sales_item::get_stock( )
    {
        return stock;
    }
    
    void sales_item::set_id( unsigned long i )
    {
        id = i;
    }
    
    void sales_item::set_name( std::string n )
    {
        name = n;
    }
    
    void sales_item::set_desc( std::string d )
    {
        desc = d;
    }
    
    void sales_item::set_price( float p )
    {
        price = p;
    }
    
    void sales_item::set_stock( long s )
    {
        stock = s;
    }
    
    bool sales_item::sell( long amount )
    {
        if( amount < 1 || amount > stock )
            return false;
    
        stock -= amount;
        return true;
    }
    

    Um sales_item verwenden zu können, ändern wir unser Hauptprogramm wie folgt ab:

    main.cpp:

    #include <iostream>
    #include "sales_item.h"
    
    using namespace std;
    
    int main( )
    {
        sales_item item;
    
        cout << "Please enter article data:" << endl;
        cin >> item;
    
        cout << endl << "Amount of " << item.get_name( ) << ": " << item.get_stock( ) << endl << endl;
    
        if( !item.sell( 2 ) )
            cout << "Could not sell 2 " << item.get_name( ) << "!" << endl << endl;
    
        cout << "2 " << item.get_name( ) << " ( ID: " << item.get_id( ) << " ) sold!" << endl << endl;
    
        cout << "Item data:" << endl;
        cout << item << endl;
    }
    

    Eine Aus-/Eingabe mit diesem Programm könnte jetzt zB. so aussehen:

    Product ID:    100
      Name:        AMD_Athlon_XP_2600+
      Description: Some_text...
      Price:       55.00
      Stock:       100
    
    Amount of AMD_Athlon_XP_2600+: 100
    
    2 AMD_Athlon_XP_2600+ ( ID: 100 ) sold!
    
    Item data:
    Product ID:    100
      Name:        AMD_Athlon_XP_2600+
      Description: Some_text...
      Price:       55
      Stock:       98
    

    Greetz, Swordfish

    PS: Sollte das nicht in deinem C++ Buch stehen!?



  • Also erstmals danke Swordfish für das Tutorial!
    Dennoch aber will es nicht gehen 😞
    Ich habe folgendes gemacht:

    sales_item.h:

    #ifndef SALES_ITEM_INCLUDED
    #define SALES_ITEM_INCLUDED SALES_ITEM_INCLUDED
    
    #include <iostream>
    #include <string>
    
    class sales_item {
    
        friend std::ostream& operator<<( std::ostream &os, sales_item &d );
        friend std::istream& operator>>( std::istream &is, sales_item &d );
    
        private:
    
            bool           valid;
            unsigned long  id;
            std::string    name;
            std::string    desc;
            float          price;
            long           stock;
    
        public:
    
            sales_item( );
            sales_item( const sales_item &other );
            sales_item( unsigned long id, std::string name, std::string desc, float price, long stock = 0 );
            ~sales_item( );
    
            unsigned long get_id( );
            std::string get_name( );
            std::string get_desc( );
            float get_price( );
            long get_stock( );
            void set_id( unsigned long i );
            void set_name( std::string n );
            void set_desc( std::string d );
            void set_price( float p );
            void set_stock( long s );
            bool sell( long amount );
    };
    #endif /* SALES_ITEM_INCLUDED */
    

    sales_item.cpp:

    #include "sales_item.h"
    
    std::ostream& operator<<( std::ostream &os, sales_item &d )
    {
        os << "Product ID:    " << d.id    << std::endl;
        os << "  Name:        " << d.name  << std::endl;
        os << "  Description: " << d.desc  << std::endl;
        os << "  Price:       " << d.price << std::endl;
        os << "  Stock:       " << d.stock << std::endl;
        return os;
    }
    
    std::istream& operator>>( std::istream &is, sales_item &d )
    {
        std::cout << "Product ID:    "; is >> d.id;
        std::cout << "  Name:        "; is >> d.name;
        std::cout << "  Description: "; is >> d.desc;
        std::cout << "  Price:       "; is >> d.price;
        std::cout << "  Stock:       "; is >> d.stock;
        return is;
    }
    
    sales_item::sales_item( ) : valid( false ), id( 0 ), name( "" ), desc( "" ), price( 0.0 ), stock( 0 )
    {
    }
    
    sales_item::sales_item( const sales_item &other )
    {
        valid = other.valid;
        id    = other.id;
        name  = other.id;
        desc  = other.desc;
        price = other.price;
        stock = other.stock;
    }
    
    sales_item::sales_item( unsigned long i, std::string n, std::string d, float p, long s )
    {
        valid = true;
        id    = i;
        name  = n;
        desc  = d;
        price = p;
        stock = s;
    }
    
    sales_item::~sales_item( )
    {
    }
    
    unsigned long sales_item::get_id( )
    {
        return id;
    }
    
    std::string sales_item::get_name( )
    {
        return name;
    }
    
    std::string sales_item::get_desc( )
    {
        return desc;
    }
    
    float sales_item::get_price( )
    {
        return price;
    }
    
    long sales_item::get_stock( )
    {
        return stock;
    }
    
    void sales_item::set_id( unsigned long i )
    {
        id = i;
    }
    
    void sales_item::set_name( std::string n )
    {
        name = n;
    }
    
    void sales_item::set_desc( std::string d )
    {
        desc = d;
    }
    
    void sales_item::set_price( float p )
    {
        price = p;
    }
    
    void sales_item::set_stock( long s )
    {
        stock = s;
    }
    
    bool sales_item::sell( long amount )
    {
        if( amount < 1 || amount > stock )
            return false;
    
        stock -= amount;
        return true;
    }
    

    und main.cpp:

    #include <iostream>
    #include "sales_item.h"
    
    using namespace std;
    
    int main( )
    {
        sales_item item;
    
        cout << "Please enter article data:" << endl;
        cin >> item;
    
        cout << endl << "Amount of " << item.get_name( ) << ": " << item.get_stock( ) << endl << endl;
    
        if( !item.sell( 2 ) )
            cout << "Could not sell 2 " << item.get_name( ) << "!" << endl << endl;
    
        cout << "2 " << item.get_name( ) << " ( ID: " << item.get_id( ) << " ) sold!" << endl << endl;
    
        cout << "Item data:" << endl;
        cout << item << endl;
    }
    

    Florian



  • florian m. schrieb:

    Also erstmals danke Swordfish für das Tutorial!

    Ich schreibe keine Tutorials. Das ist ein Forum, und das war ein Post. Wenn du Tutorials willst, dann beglücke google.

    florian m. schrieb:

    Dennoch aber will es nicht gehen 😞

    Das ist keine Fehlerbeschreibung!
    Entwicklungsumgebung? (OS, IDE, Compiler?)
    Fehlermeldung? (Compiler, Linker, Runtime?)

    Kann es sein, dass du meine Links nicht ließt? ➡ Smart Questions

    Greetz, Swordfish



  • Swordfish schrieb:

    florian m. schrieb:

    Also erstmals danke Swordfish für das Tutorial!

    Ich schreibe keine Tutorials. Das ist ein Forum, und das war ein Post. Wenn du Tutorials willst, dann beglücke google.

    florian m. schrieb:

    Dennoch aber will es nicht gehen 😞

    1.Das ist keine Fehlerbeschreibung!
    2.Entwicklungsumgebung? (OS, IDE, Compiler?)
    3.Fehlermeldung? (Compiler, Linker, Runtime?)

    1. Also es startet nicht,die kompilierung funktioniert nicht ^^
    2. IDE,nähmlich Code::Blocks
    3. Br... also muss mal überlegen bzw. nachschauen,ich sage es gleich ...


Anmelden zum Antworten