Sales_item - ? Fragen



  • Hallo,

    ich habe nun alles mit der for- und While-Anweisung verstanden und bin nun zum nächsten Thema,Klassen vorgegangen.Soweit so gut 🙂
    Nur im Buch steht ja nichts von diesem Thema genau,jedenfalls nicht am Anfang.
    ---->Ich habe ein Buch,names C++ Primer,dass jeder kennt 😉 <----
    Zu meinen drei Fragen,über Sales_item:

    Bei mir steht im Quelltext etwas von #include "Sales_item.h".
    Es ist ja ein Includen,aber wie mache ich nun weiter?Würde das einfach
    so gehen,ohne eine neue Datei namens Sales_item.h zu erstellen?

    Wie die Klasse funktioniert,weiß ich,nur nicht wie sie geht d.h wie sie aufgebaut wird ... und wie man auf das Ergebnis bzw. auf die Eingabe draufkommt 😞

    3)Man muss ja(muss nichts,können kann man ^^) dann irgendwie bsp. ^0-201-78345-X 3 20.00^ und ^0-201-78345-X 2 25.00^ eingeben und es kommt irgendwie ^1-206-78345-X 5 110.00 22^ heraus 😕
    Wie funktioniert dieses System da?

    Mit freundlichen Grüßen,

    euer Florian 😉

    P.S.: Die Ergebnisse hab ich aus dem Buch ...



  • florian m. schrieb:

    ich habe nun alles mit der for- und While-Anweisung verstanden und bin nun zum nächsten Thema,Klassen vorgegangen.

    Nunja, ob Klassen der nächste logische Schritt ist, lässt sich bezweifeln. Pointer kennst du schon!?

    ad 1)

    Nö.

    ad 2)

    florian m. schrieb:

    Wie die Klasse funktioniert,weiß ich,nur nicht wie sie geht d.h wie sie aufgebaut wird

    contradictio in adjecto

    ad 3)

    Ohne das System zu sehen, welches mit diesen Daten gefüttert wird, kann man darauf - in Ermangelung einer Kristallkugel - keine Antwort finden.

    ➡ Smart Questions

    Greetz, Swordfish



  • Swordfish schrieb:

    ad 1)

    Nö.

    Was muss ich in meine .h Datei denn reinschreiben,damit es geht?



  • Du musst in deine.h

    #include <iostream>
    
    void test( )
    {
        std::cout << "test" << std::endl;
    }
    

    "reinschreiben" damit

    #include "deine.h"
    
    int main( )
    {
        test( );
    }
    

    funktioniert.

    Greetz, Swordfish

    PS: ➡ Smart Questions



  • Swordfish schrieb:

    Du musst in deine.h

    #include <iostream>
    
    void test( )
    {
        std::cout << "test" << std::endl;
    }
    

    "reinschreiben" damit

    #include "deine.h"
    
    int main( )
    {
        test( );
    }
    

    funktioniert.

    Greetz, Swordfish

    PS: ➡ Smart Questions

    Ich lach mich schlapp...aber zu den Fragen...kann man da überhaupt sinnvoll antworten -man weiß es nicht- 😃



  • [offtopic] ( <- Wobei diese Bemerkung wohl alleine schon als Veräppelung durchgeht 😉 )
    @CodeFinder: Willst du damit etwa andeuten, meine Antworten seien nicht sinnvoll? 😃 😃 😃
    [/offtopic]

    Greetz, Swordfish



  • Swordfish schrieb:

    Nunja, ob Klassen der nächste logische Schritt ist, lässt sich bezweifeln. Pointer kennst du schon!?

    1. Ist das nicht Sache des Buches das er hat?
    2. Warum muß man vor Klassen die Pointer kennen?

    Nein, du brauchst mir nicht drauf antworten, es sind reine provokative Fragen die dich bewegen sollen, mal über deine Aussagen nachzudenken.



  • Morgen Artchi!

    Artchi schrieb:

    1. Ist das nicht Sache des Buches das er hat?

    Ja, natürlich aber nach diesem Satz:

    florian m. schrieb:

    Nur im Buch steht ja nichts von diesem Thema genau,jedenfalls nicht am Anfang.

    habe ich die unangenehme Befürchtung, dass er sein Buch nicht (immer stetig) von vorne nach hinten ließt. Weiters unterstell ich mal', daß dort Präprozessoranweisungen à la #include vor Klassen behandelt werden:

    florian m. schrieb:

    Bei mir steht im Quelltext etwas von #include "Sales_item.h".
    Es ist ja ein Includen,aber wie mache ich nun weiter?Würde das einfach
    so gehen,ohne eine neue Datei namens Sales_item.h zu erstellen?

    Artchi schrieb:

    2. Warum muß man vor Klassen die Pointer kennen?

    Ich habe nicht behauptet, daß es nicht möglich ist, mit Klassen umzugehen bzw. die Idee der OOP zu erfassen. Ich wollte damit eigentlich auf provokative Weise herausfinden, ob er sein Buch wirklich von vorne nach hinten ließt. Sprich ich habe auf ein "Pointer!??? Was ist das?" gewartet.

    Artchi schrieb:

    Nein, du brauchst mir nicht drauf antworten, es sind reine provokative Fragen die dich bewegen sollen, mal über deine Aussagen nachzudenken.

    Doch! Ich will dir Antworten, denn ich habe kein Problem damit, kritisiert zu werden. Du meinst hoffentlich nur meine Posts in diesem Thread!?

    Greetz, Swordfish



  • florian m: Liest du das Schnelleinstiegskapitel? Wenn ja, überspring das.



  • Swordfish schrieb:

    [offtopic] ( <- Wobei diese Bemerkung wohl alleine schon als Veräppelung durchgeht 😉 )
    @CodeFinder: Willst du damit etwa andeuten, meine Antworten seien nicht sinnvoll? 😃 😃 😃
    [/offtopic]

    Greetz, Swordfish

    Neeeeeiiinn, wie könnte ich 😃 😃 ..naja aber die Fragen waren einfach nur Lollig + Trollig 😃 🤡



  • Swordfish schrieb:

    Du musst in deine.h

    #include <iostream>
    
    void test( )
    {
        std::cout << "test" << std::endl;
    }
    

    "reinschreiben" damit

    #include "deine.h"
    
    int main( )
    {
        test( );
    }
    

    funktioniert.

    Aber was würde das für einen Sinn haben,einfach nur

    #include <iostream>
    
    void test( )
    {
        std::cout << "test" << std::endl;
    }
    

    reinzuschreiben,wenn eh nichts in dieser Datei steht und dann müsste man ja einfach nur noch mit #include includen,aber könnten Sie mir bitte ein genaueres Beispiel zeigen?



  • Swordfish schrieb:

    Du musst in deine.h

    #include <iostream>
    
    void test( )
    {
        std::cout << "test" << std::endl;
    }
    

    "reinschreiben" damit

    #include "deine.h"
    
    int main( )
    {
        test( );
    }
    

    funktioniert.

    Aber was würde das für einen Sinn haben,einfach nur

    #include <iostream>
    
    void test( )
    {
        std::cout << "test" << std::endl;
    }
    

    reinzuschreiben,wenn eh nichts in dieser Datei steht und dann müsste man ja einfach nur noch mit #include includen,aber könnten Sie mir bitte ein genaueres Beispiel zeigen?



  • Hui, ...

    Erstmal BTW: Ein Post hätte genügt 😉

    Also woher sollen wir denn wissen, wie deine Klasse definiert ist bzw was sie kann/können soll 😕

    Aber was würde das für einen Sinn haben,einfach nur

    Das was Swordfish gepostet hat, hat natürlich keinen Sinn...das war nur n'Joke...das liegt aber daran, das deine Fragestellung völlig abwägig ist ...-glaub mir fliegt der Draht außer Mütze- 😃

    Hm ok, wenn man es genau nimmt hat es natülich einen Sinn: Es gibt "test" aus... Das ist natürlich sehr hilfreich, wenn man mal wissen möchte wie das Wort "test" auf der Konsole aussieht 💡 🕶

    Das wär vergleichbar mit:

    ^[totaler quatsch, hähä]^
    Hey, ich brauch ne Klasse CDocument...kannst du mir mal sagen wie dir funktioniert, ich versteh das nicht.
    ~[\totaler quatsch, hähä]~

    😃 😃 😃

    ➡ Verstehst du was wir meinen ? ⚠



  • Ich sag' nur noch nochmal ➡ Smart Questions (Diemal auf Deutsch 😉 )

    Greetz, Swordfish



  • Hat wirklich keiner von euch eine Lösung bzw. könnte mir dabei bitte helfen?
    Die Klassen würde ich gerne hinter mir haben,aber ... 🙄



  • Was genau ist denn dein Problem?
    Sieh mal hier rein
    http://tutorial.schornboeck.net/uebersetzungseinheiten.htm



  • florian m. schrieb:

    Hat wirklich keiner von euch eine Lösung bzw. könnte mir dabei bitte helfen?
    Die Klassen würde ich gerne hinter mir haben,aber ... 🙄

    WAS genau willst du denn ?



  • Braunstein schrieb:

    Was genau ist denn dein Problem?
    Sieh mal hier rein
    http://tutorial.schornboeck.net/uebersetzungseinheiten.htm

    Danke Braunstein,dank Ihnen habe ich nun glaube ich die passende Frage an CodeFinder gefunden,vielen Dank.

    CodeFinder schrieb:

    florian m. schrieb:

    Hat wirklich keiner von euch eine Lösung bzw. könnte mir dabei bitte helfen?
    Die Klassen würde ich gerne hinter mir haben,aber ... 🙄

    WAS genau willst du denn ?

    Erstmals danke CodeFinder,dafür dass Sie sich einsetzen um mir zu helfen.
    Da mir Braunstein den Link zu so einem Beispiel gegeben hat,würde ich Sie fragen,wie man es mit diesem Include macht,also mit
    #include "sales_item.h".Da ich noch keine Ahnung vom Includen hab(halt nur in Gedanken daweil),würde ich Sie gerne fragen wie das geht.Aber bitte mit sales_item.h beispiel,bitte CodeFinder.

    Mfg. Florian



  • florian m. schrieb:

    Erstmals danke CodeFinder,dafür dass Sie sich einsetzen um mir zu helfen.
    Da mir Braunstein den Link zu so einem Beispiel gegeben hat,würde ich Sie fragen,wie man es mit diesem Include macht,also mit
    #include "sales_item.h".Da ich noch keine Ahnung vom Includen hab(halt nur in Gedanken daweil),würde ich Sie gerne fragen wie das geht.Aber bitte mit sales_item.h beispiel,bitte CodeFinder.

    Mfg. Florian

    Hm ja, kein Problem. 👍

    🙂 OK. Ich. werd. mal. versuchen. es. zu. erklären. 🙂

    Stell dir vor du hast eine Quellcodedatei main.cpp. In dieser steht nun dein Hauptprogramm. Jetzt stell dir vor, du willst dein Programm erweitern... . Du erstellst noch ne Datei: ext.cpp. Jetzt fällt dir auf, in beiden Dateien (main.cpp und ext.cpp) befinden sich gewissen Codeausschnitte, die du öfter brauchst, eziehungsweise in beiden Dateien (main.cpp und exgt.cpp). Hier kommt ein s.g. Header bzw eine s.g. Headerdatei ins Spiel. Darin laagerst du einfach Code aus der dann in mehreren Cpp-Dateien benutzt werden kann. So...

    Damit deine Cpp-Datei nun diese Header auch kennt, musst du sie inkludieren (= einbinden; der Cpp-Datei also 'bekannt machen' 😉 ). Das macht man mit einem:

    #include "dateiname.h"
    // und in deinem Fall:
    #include "sales_item.h"
    

    In der Datei sales_item.h befinden sich also bestimmte Definitionen: Type, Funktionen, ... .

    Man sollte vllt. noch erwähnen das es einen Unterschied zwischen:

    #include "sales_item.h"
    

    und

    #include <sales_item.h>
    

    gibt, nämlich: Bei der oberen Inkludierung mit Anführungszeichen sucht der Compiler die Datei im aktuellen Projektverzeichnis, beim anderen in seinem Standard-Include-Verzeichnis 💡 .

    Der technische Aspekt:
    Rein technisch betrachtet, kann man sich das so vorstellen:

    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. 🤡 )
    Somit erstellt man prinipiell eine ziemlich 'große Datei', die jedoch im uncompilierten Zustand (also in Form von Quellcodedateien) wesentlich übersichtlicher ist.

    Noch eine Bemerkung:
    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. Wenn der Linker dann versucht die Objektdateien (=Zwischenprodukt der Cpp-Dateien beim kompilieren) zu verlinken, wird er entsprechend der Anzahl der gefundenen 'doppelt-definierten-Funktionen' Fehler anzeigen. 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).

    In deinem Beispiel (sales_item) kann man also davon ausgehen, das -wenn sales_item eine Klasse ist und das Buch es richtig macht 😃 - noch eine weitere Definitionsdatei vorliegt, möglicherweise/sinnvollerweise mit dem Namen sales_item.cpp in der die Methoden der Klasse definiert sind.

    Wow was ein Text, hoffe das war verständlich...glaub da kann man auch noch mehr schreiben, aber das wär dann nur noch verwirrend 😉



  • CodeFinder schrieb:

    florian m. schrieb:

    Erstmals danke CodeFinder,dafür dass Sie sich einsetzen um mir zu helfen.
    Da mir Braunstein den Link zu so einem Beispiel gegeben hat,würde ich Sie fragen,wie man es mit diesem Include macht,also mit
    #include "sales_item.h".Da ich noch keine Ahnung vom Includen hab(halt nur in Gedanken daweil),würde ich Sie gerne fragen wie das geht.Aber bitte mit sales_item.h beispiel,bitte CodeFinder.

    Mfg. Florian

    Hm ja, kein Problem. 👍

    🙂 OK. Ich. werd. mal. versuchen. es. zu. erklären. 🙂

    Stell dir vor du hast eine Quellcodedatei main.cpp. In dieser steht nun dein Hauptprogramm. Jetzt stell dir vor, du willst dein Programm erweitern... . Du erstellst noch ne Datei: ext.cpp. Jetzt fällt dir auf, in beiden Dateien (main.cpp und ext.cpp) befinden sich gewissen Codeausschnitte, die du öfter brauchst, eziehungsweise in beiden Dateien (main.cpp und exgt.cpp). Hier kommt ein s.g. Header bzw eine s.g. Headerdatei ins Spiel. Darin laagerst du einfach Code aus der dann in mehreren Cpp-Dateien benutzt werden kann. So...

    Damit deine Cpp-Datei nun diese Header auch kennt, musst du sie inkludieren (= einbinden; der Cpp-Datei also 'bekannt machen' 😉 ). Das macht man mit einem:

    #include "dateiname.h"
    // und in deinem Fall:
    #include "sales_item.h"
    

    In der Datei sales_item.h befinden sich also bestimmte Definitionen: Type, Funktionen, ... .

    Man sollte vllt. noch erwähnen das es einen Unterschied zwischen:

    #include "sales_item.h"
    

    und

    #include <sales_item.h>
    

    gibt, nämlich: Bei der oberen Inkludierung mit Anführungszeichen sucht der Compiler die Datei im aktuellen Projektverzeichnis, beim anderen in seinem Standard-Include-Verzeichnis 💡 .

    Der technische Aspekt:
    Rein technisch betrachtet, kann man sich das so vorstellen:

    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. 🤡 )
    Somit erstellt man prinipiell eine ziemlich 'große Datei', die jedoch im uncompilierten Zustand (also in Form von Quellcodedateien) wesentlich übersichtlicher ist.

    Noch eine Bemerkung:
    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. Wenn der Linker dann versucht die Objektdateien (=Zwischenprodukt der Cpp-Dateien beim kompilieren) zu verlinken, wird er entsprechend der Anzahl der gefundenen 'doppelt-definierten-Funktionen' Fehler anzeigen. 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).

    In deinem Beispiel (sales_item) kann man also davon ausgehen, das -wenn sales_item eine Klasse ist und das Buch es richtig macht 😃 - noch eine weitere Definitionsdatei vorliegt, möglicherweise/sinnvollerweise mit dem Namen sales_item.cpp in der die Methoden der Klasse definiert sind.

    Wow was ein Text, hoffe das war verständlich...glaub da kann man auch noch mehr schreiben, aber das wär dann nur noch verwirrend 😉

    Also da haben Sie sich sehr viel Mühe um mich gemacht,vielen Dank CodeFinder 👍
    Ich will das mal zusammenfassen,was ich verstanden hab:

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

    2)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?).

    1. In datei.cpp kann man nun die klasse sales_item benutzen,indem man #include "test.h" reincodet.

    Also ein sehr nettes Tutorial,würde ich mal sagen. 😉

    Könnten Sie mich vielleicht korrigieren,falls ich in meinen eigenen Schritten falsch gesagt habe?

    Mfg. Florian


Log in to reply