Einteilung in Klassen
-
Servus ich habe versucht folgendes Programm mit der C Unterprogrammtechnik in C++ mit Klassen etc umzu setzten.
Jetzt bin ich mir aber nicht sicher ob as in der main so in ordnung ist oder ob ich da doppelt arbeite weil ich da ja nochmal variable deklariere um das Programm zum laufen zu bekommen.#include <iostream.h> int cin_auswahl(); void cout_wert(int); int cin_auswahl() { int auswahl; do { cout<<"\n \t Z A H L E N K O N V E R T I E R U N G \n"; cout<<"Bitte Waehlen Sie aus zwischen\n"; cout<<"1.Hexadezimal\n2.Octal\n3.Dezimal\n\n"; cin >> auswahl; if((auswahl<1)||(auswahl>3)) { cout<< "Wertenereich ungueltig"; cout<< "\nErneute Eingabe taetigen"; } }while((auswahl<1)||(auswahl>3)); return(auswahl); } void cout_wert(int auswahl) { int wert; switch (auswahl) { case 1: cout <<"\nHexadezimal ="; cin >> hex >> wert; cout <<"Dezimal ="<< dec <<wert; cout <<"\nOctal ="<< oct <<wert<<"\n"; break; case 2: cout <<"\nOctal ="; cin >> oct >>wert; cout<<"Dezimal ="<< dec <<wert; cout<<"\nHexadezimal ="<< hex << wert<<"\n"; break; case 3: cout << "Dezimalzahl ="; cin >> dec >> wert; cout<<"Hexadezimal ="<< hex << wert; cout<<"\nOctal ="<< oct <<wert<<"\n"; break; } } int main() { int auswahl; auswahl=cin_auswahl(); cout_wert(auswahl); return 0; }mit klassen:
#include <iostream.h> class nummber { public: void init(int wert,int auswahl); int cin_auswahl(int); void cout_wert(int,int); private: int wert1; int auswahl1; }; void nummber::init(int wert,int auswahl) { wert1=wert; auswahl1=auswahl; } int nummber::cin_auswahl(int auswahl) { do { cout<<"\n \t Z A H L E N K O N V E R T I E R U N G \n"; cout<<"Bitte Waehlen Sie aus zwischen\n"; cout<<"1.Hexadezimal\n2.Octal\n3.Dezimal\n\n"; cin >> auswahl; if((auswahl<1)||(auswahl>3)) { cout<< "Wertenereich ungueltig"; cout<< "\nErneute Eingabe taetigen"; } }while((auswahl<1)||(auswahl>3)); return(auswahl); } void nummber::cout_wert(int auswahl,int wert) { switch (auswahl) { case 1: cout <<"\nHexadezimal ="; cin >> hex >> wert; cout <<"Dezimal ="<< dec <<wert; cout <<"\nOctal ="<< oct <<wert<<"\n"; break; case 2: cout <<"\nOctal ="; cin >> oct >>wert; cout<<"Dezimal ="<< dec <<wert; cout<<"\nHexadezimal ="<< hex << wert<<"\n"; break; case 3: cout << "Dezimalzahl ="; cin >> dec >> wert; cout<<"Hexadezimal ="<< hex << wert; cout<<"\nOctal ="<< oct <<wert<<"\n"; break; } } int main(void) { int auswahl=0; int wert=0; nummber zk; //Zahlenkonvertierungsinstanz zk.init(0,0); auswahl=zk.cin_auswahl(auswahl); zk.cout_wert(auswahl,wert); return 0; }schonmal danke für eure hilfe

-
#if !defined(NUMBER_H__INCLUDED) // - Include Guard #define NUMBER_H__INCLUDED // - Include Guard #if (_MSC_VER > 1000) #pragma once // - Sowas ähnliches wie ein Include Guard ... Forumsuche #endif // _MSC_VER > 1000 #include <iostream> // iostream.h gibt es im Standard nicht! class Number { private: enum Type { N_DEC = 0, N_OCT, N_HEX } m_Type; // Unsere Zahlentypen ... unsigned int m_nValue; // Die Zahl ... public: Number(const Type type = N_DEC, const unsigned int value = 0) : m_Type(type), m_nValue(value) // Konstruktor mit default-value und Initialisierungsliste {} public: void stream(std::ostream& stream) const // Funktion die einen Ausgabestream haben will ... dann können wir unsere Zahl in entsprechender Form ausgeben ... const, da wir nichts an den Membervariablen ändern ... { stream << (m_Type == N_DEC ? std::dec : (m_Type == N_OCT ? std::oct : std::hex)) << m_nValue; } }; #endif // NUMBER_H__INCLUDED // - Include Guard... so wäre das eher zu machen ... also würde ich so machen

Edit
So ... google.de einfach mal nach den Sachen wie "Include Guard" und benutz die Forumsuche für "Include Guard vs. #pragma once" ...
Wenn de sonnst was nicht verstehst ... guck dir ein Grundlagen-Tutorial an!
Jetzt musst du übrigens noch die operator's wie +, -, == usw überladen, damit deine Klasse einen Sinn hat.int main() { Number num(N_HEX, 100); num.stream(std::cout); }
-
oO so viele Sachen die ich noch nie gesehen hab^^
könnte ich nicht einfach was an meiner main so ändern , das ich verhindere die beiden variablen nochmal neu zu deklarieren?
kommt schlecht wenn ich da sachen einbaue die ich noch net gehabt hab und netmal im ansatz verstehe....
-
Hab dir was dran geschrieben ...
-
(D)Evil schrieb:
public: void stream(std::ostream& stream) const { stream << (m_Type == N_DEC ? std::dec : (m_Type == N_OCT ? std::oct : std::hex)) << m_nValue; } };Igit. Wenn du aus nem case so ein unübersichtliches if ... else if .... else machst, ist es bestimmt nicht besser. Stell dir mal vor, dass soll erweitert werden.
@Dragonslayer
Ist dir der Sinn von Membervariablen bekannt? Wenn du auswahl1 einen Wert zuweist, dann hat sie diesen auch noch in der nächsten Methode, wenn es sich um die selbe instanz der Klasse handelt.
-
patternswärenzuviel
Wollte ich die erweitern? Hab ich nicht gesagt. So ist es kürzer und ich versuchen meist eine rel. kurze Lösung zu finden ... gerade if else-kram kann man damit schön kürzen ...
-
geht ja nit darum das ich zu faul bin mir das anzueigen, nur ich soll halt als testat das obrige programm in Klassen unterteilen, quasi nur die grundlagen mit methoden etc.
Das kann doch net so kompliziert sein^^
will nur wissen obs sich die deklaration von zusätzlichen variablen die ich hier mache vermeiden läst.
int main(void) { int auswahl=0; // sinnvoll? int wert=0; // sinnvoll? nummber zk; //Zahlenkonvertierungsinstanz zk.init(0,0); auswahl=zk.cin_auswahl(auswahl); zk.cout_wert(auswahl,wert); return 0; }
-
(D)Evil schrieb:
So ist es kürzer und ich versuchen meist eine rel. kurze Lösung zu finden ...
Was nicht immer besser ist, wenns nur um die Codelänge geht.
@Dragonslayer
So wie du das machst ist das nicht sinnvollvoid nummber::cin_auswahl() { do { cout<<"\n \t Z A H L E N K O N V E R T I E R U N G \n"; cout<<"Bitte Waehlen Sie aus zwischen\n"; cout<<"1.Hexadezimal\n2.Octal\n3.Dezimal\n\n"; cin >> auswahl1; //in die Membervariable ... void cout_wert() { int wert; switch (auswahl1) //wieder die Membervariable verwenden { case 1: ...
-
hm die member varaible public machen?
-
ALso selber nochmal nachgedacht und zu dem entschluss gekommen das die beiden methoden ja einfach beide gar keine werte haben müssen
#include <iostream.h> class nummber { public: void init(int wert,int auswahl); int cin_auswahl(); void cout_wert(); private: int wert1; int auswahl1; }; void nummber::init(int wert,int auswahl) { wert1=wert; auswahl1=auswahl; } int nummber::cin_auswahl() { do { cout<<"\n \t Z A H L E N K O N V E R T I E R U N G \n"; cout<<"Bitte Waehlen Sie aus zwischen\n"; cout<<"1.Hexadezimal\n2.Octal\n3.Dezimal\n\n"; cin >> auswahl1; if((auswahl1<1)||(auswahl1>3)) { cout<< "Wertenereich ungueltig"; cout<< "\nErneute Eingabe taetigen"; } }while((auswahl1<1)||(auswahl1>3)); return(auswahl1); } void nummber::cout_wert() { switch (auswahl1) { case 1: cout <<"\nHexadezimal ="; cin >> hex >> wert1; cout <<"Dezimal ="<< dec <<wert1; cout <<"\nOctal ="<< oct <<wert1<<"\n"; break; case 2: cout <<"\nOctal ="; cin >> oct >>wert1; cout<<"Dezimal ="<< dec <<wert1; cout<<"\nHexadezimal ="<< hex << wert1<<"\n"; break; case 3: cout << "Dezimalzahl ="; cin >> dec >> wert1; cout<<"Hexadezimal ="<< hex << wert1; cout<<"\nOctal ="<< oct <<wert1<<"\n"; break; } } int main(void) { nummber zk; //Zahlenkonvertierungsinstanz zk.init(0,0); zk.cin_auswahl(); zk.cout_wert(); return 0; }versteh ich das richtig das man auf private elemente in methoden zugreifen kann, wenn man vorher mit einer init methode zuweist?
-
Hi,
kleine Randbemerkung: "Nummber" ??
Also ich würde mich für eine Sprache entscheiden.
Gruß,
Simon2.