Objektorientiertes Programmieren
-
Werner Salomon schrieb:
Für die Eingabe und Ausgabe in C++ gibt es cin und cout. Und zur 'Ausgabe eines Unternehmens' (hier z.B. Umsätze) bietet sich eine Funktion
std::ostream& operator<<( std::ostream& out, const Unternehmen& unternehmen );an, die man am Besten als 'friend' in der Klasse 'Unternehmen' deklariert.
Gruß
WernerDie Argumente allgemein sind natürlich völlig richtig und auch das Argument oben ist sicherlich richtig, aber ich denke für jemanden der gerade in die OOP hineinschaut ist vielleicht die Operatorüberladung etwas viel am Anfang. Da sie sich ja in dem Beispiel auch vermeiden lässt und ja als Ziel eher Übersichtlichkeit und Struktur des Programms im Vordergrund stehen, als eine Entwicklung für Wiederverwendung, würde ich in dem Fall dazu tendieren es vielleicht über eine Memberfunktion zu machen.
MfG Jasc
-
Ich hab mir 2 Klassen überlegt eine InputOutput & Unternehmen die führt die Berechnnungen eines Unternehmen aus .Ich denke der Zusammenhang ist ok.
Als nächstes wie sieht es mit den Variablen aus, sollte man die Variablen in einer Klasse definieren unter Private oder in der Methode selbst ?
class InputOutput{ private: public: void input(); void output(); }; class Unternehmen{ private: public: void mittelwert(); void standabw(); void MinMax(); };
-
Generell würde ich vor allem bei grösseren und komplexeren Klassen folgenden Aufbau empfehlen:
class MyClass { private: // Variabeln als privat deklarieren static short Classes; // statische Membervariable (z.B. wieviele Instanzen existieren) int var1, var2; double var3; public: MyClass(); // Mehrere Konstruktoren MyClass(int a, int b, double c); // ... int GetV1() const; // Getter und Setter, um sicherer Daten void SetV1(int V1); // zu manipulieren };In den Methoden kannst du keine instanzspezifischen Variabeln deklarieren. Wenn du mehrere Instanzen einer Klasse hast, werden (selbst statische) Variabeln in den Funktionen überschrieben. Deshalb müssen sie nicht-statische Member der Klasse sein - statische Membervariabeln im Gegensatz existieren nur einmal pro Klasse, also nicht spezifisch für jede Instanz.
Bei kleineren Klassen (z.B. für eine komplexe Zahl) kannst du es aber auch einfacher machen:
struct Complex // struct, damit nicht man nicht public schreiben muss { double real; // zwei öffentliche Membervariabeln double imag; }
-
Hallo,
Hab ein kleines beispiel Programm gemacht um dabei die fragen zu lösen.
Als erstes eine Fehlermeldung pop "Instanz" is corrupted.
2. Fehlermeldung wenn ich das Array monate[12][12].. unter Private deklariere in der Klasse InputOutput folgt eine Fehlermeldung -> : Syntaxfehler: '{'
1>c:\users\hasso\music\documents\visual studio 2008\projects\aufgabe4\aufgabe4\aufgabe4.cpp(12) : error C2334: Unerwartete(s) Token vor '{'; sichtbarer Funktionstext wird übersprungen
Warum geht das nicht?Wenn das Array in der Methode deklrariert wird klappts.
#include <iostream> #include <cstdlib> #include <cstdio> using namespace std; class InputOutput{ private: float umsatz[12]; public: void eingabe(); void ausgabe(); }; class Unternehmen{ private: public: void mittelwert(); void standabw(); void MinMax(); }; void InputOutput::eingabe(){ int i; printf("Geben Sie 12 Umsaetze ein!"); for(i = 1; i <= 12; i++) { printf("\n%i Eingabe:",i);scanf("\n%f",&umsatz[i]); } } void InputOutput::ausgabe(){ char monate[12][12] = {"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"}; int i; for (i = 1; i <= 12; i++){ printf(" %.2f %s\n",umsatz[i],monate[i]); } } int main(){ InputOutput pop; // setze Instanz! pop.eingabe(); pop.ausgabe(); }
-
Du kannst eben in der Klasse selber eine Variable nur deklarieren und definieren, aber nicht initialisieren (Begriffe siehe hier). Initialisierungen müssen von aussen oder in einer Memberfunktion ablaufen.
An deiner Stelle würde ich es im Konstruktor erledigen (das ist die Memberfunktion, die beim Erstellen des Objekts aufgerufen wird):
class MyClass { private: int Var; // Deklaration und Definition der Variable public: MyClass(); // Standardkonstruktor (Deklaration) }; MyClass::MyClass() // Konstruktor (Definition) { Var = 4; // Initialisierung der Variable }Oder direkt in der Elementinitialisierungsliste (das ist aber im Moment noch nicht so wichtig - ich würde mich zuerst mit Klassen, Konstruktoren und Memberfunktionen ausführlich auseinandersetzen):
MyClass::MyClass() // Konstruktor (Definition) : Var(4) // Initialisierung der Variable { }Statt char-Arrays würde ich dir unbedingt zu
std::stringraten. Auch die STL könnte dir nützlich sein (z.B.std::vector<>)
-
Wo genau erscheint dieser Fehler?
Zu 2. Ein Array kannst du nicht in der Deklaration definieren. Das muss im ctor geschehen und dort kannst du das auch nicht per Initialisierungsliste machen. Das heisst, du musst das Array im ctor ganz einfach per Zuweisung füllen.
-
Nexus schrieb:
Variabeln Variabeln Membervariabeln Membervariabeln
vielleicht möchtest du deinen kompetenten beiträgen in zukunft noch den letzten professionellen schliff verpassen, indem du das wort "Variable" richtig schreibst?
-
deutschlehrer schrieb:
Nexus schrieb:
Variabeln Variabeln Membervariabeln Membervariabeln
vielleicht möchtest du deinen kompetenten beiträgen in zukunft noch den letzten professionellen schliff verpassen, indem du das wort "Variable" richtig schreibst?
Vielleicht möchtest Du Deinen inkompetenten Beiträgen in Zukunft noch den letzten professionellen Schliff verpassen, indem Du Groß- und Kleinschreibung korrekt verwendest?
-
Bis jetzt dachte ich tatsächlich, man könne im Plural sowohl "Variabeln" als auch "Variablen" verwenden. Aber man trifft "Variabeln" auch ziemlich häufig an; möglicherweise wird es sogar eines Tages ins Wörterbuch aufgenommen. Ich hätte meinen Fehler jetzt nie bemerkt, wenn ich nicht darauf aufmerksam gemacht worden wäre...
@ Tachyon: Dir stimme ich vollständig zu

-
abend,
kann mir das mal jemand bitte nochmal erklären!!
Ich hab mir das mit den Instalisierungen angeguckt so ganz hilft mir auch auf mein Problem auch nicht weiter..Ich hab das Programm teilweise geschrieben und ich muss jedesmal das Array monate in einer Methode deklarieren weil ich nicht so weiß wie das mit den memberfunktionen bzw mit der Instalisierung funtkioniert.
In c hätte ich es einfach per Parameter übergeben wenn ich das mache steht immer Überladene Memberfunktion nicht in 'Business' gefundenwär jemand so lieb könnte es mir in Icq dabei einwenig helfen?
hier der Queltext:
#include <iostream> #include <cstdlib> #include <cstdio> using namespace std; class Business{ private: float umsatz_unternehmen[12][2]; int i; int j; public: void eingabe(); void ausgabe(); void mittelwet(); void standardabw(); void min(); void max(); void start(); }; void main(){ class Business filiale; filiale.eingabe(); filiale.ausgabe(); } void Business::eingabe(){ char monate[12][12] = {"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember" }; for(j=1;j<=1;j++) { printf( "\nBitte geben Sie die Umsaetze fuer Unternehmen A ein:\n" ); for(i=0;i<=11;i++) { do{ printf("Bitte %i -ten Umsatz fuer %s 2007\n",i+1,monate[i]); printf("Eingabe:");fflush(stdin); cin >> umsatz_unternehmen[i][0]; } while(umsatz_unternehmen[i][0] < 0 ); } printf( "\nBitte geben Sie die Umsaetze fuer Unternehmen B ein:\n" ); for(i=0;i<=11;i++) { do{ printf("Bitte %i -ten Umsatz fuer %s 2007\n",i+1,monate[i]); printf("Eingabe:");fflush(stdin); cin >> umsatz_unternehmen[i][1]; } while(umsatz_unternehmen[i][1] < 0); } } } void Business::ausgabe(){ printf("--------------------------------------------------------------------------------\n"); printf(":::::::::::::::::::::Filiale A:::::::::::::::::::Filiale B::::::::::::::::::::::\n"); for (i=0; i<=11; i++) { printf("%5i. %10s 2007 %10.2f EU",i+1 ,monate[i],umsatz_unternehmen[i][0]); printf("%5i. %10s 2007 %10.2f EU",i+1 ,monate[i],umsatz_unternehmen[i][1]); printf("\n"); } printf("\n--------------------------------------------------------------------------------"); }
-
Hallo,
Das Programm ist fast fertig geschrieben.
Die Aufgabe war alle Methoden in einer Klasse zu schreiben, somit ist es nicht notwendig mehrere Klassen zu setzen.Nun die aufgabe die mir schwirigkeiten bereittet:
/Zusätzlich soll eine weitere Methode: FileWrite entworfen werden, die alle während eines
Programmlaufes eingegebenen Daten und die Ergebnisse von Berechnungen in eine (neue) CSV –
Datei exportiert. Diese kann dann als Protokolldatei (logfile) betrachtet werden.
[Für die Dateiarbeit sollen letztlich in b.) die C++ - Möglichkeiten genutzt werden.]/Weiß jemand wie das gehen soll?? kann mir jemand erkären wie da rangehen soll..
Danke im vorraus!!Hier mein CODE:
#include <iostream> #include <conio.h> #include <cstdlib> #include <cstdio> #include <math.h> using namespace std; class Business{ private: float umsatz_unternehmen[12][2]; float summe_1, summe_2, mittelwert_1, mittelwert_2; float stdabw_1, stdabw_2; float min, max; char choice; int i; int j; public: void start(); void eingabe(); void ausgabe(); void mittelwert(); void standardabw(); void MinMax_a(); void MinMax_b(); void filewrite(); int pruefung(); }; char first_use = 1; int main(){ class Business filiale; filiale.start(); } int Business::pruefung(){ while(1) { printf("\n\t(E)ingabe der Umsaetze beider Filialen........... e"); printf("\n\t(A)usgabe der Umsaetze beider Filialen........... a"); printf("\n\t(M)ittelwert beider Filialen..................... m"); printf("\n\t(S)tandardabweichung beider Filialen............. s"); printf("\n\t()MinMax Filiale A.............................. o"); printf("\n\t()MinMax Filiale B.............................. p"); printf("\n\t(V)erlasse Programm.............................. v\n"); printf("\n\tBitte Ihre Wahl : "); cin >> choice; if ( choice !='e' && choice !='a' && choice !='m' && choice !='s' && choice !='o' && choice !='p' && choice !='v' && choice !='E' && choice !='A' && choice !='M' && choice !='S' && choice !='O' && choice !='P' && choice !='V') { printf("Ungueltige Eingabe!"); } else if ( choice != 'v' && 'V' && choice != 'e' && choice != 'E' && first_use) { printf("Mistake by Input"); printf("Please first Input !"); } else { return choice; } } } void Business::start(){ while(1) { switch( pruefung() ) { case 'e': case 'E': eingabe(); first_use = 0; break; case 'a': case 'A': ausgabe(); break; case 'm': case 'M': mittelwert(); break; case 's': case 'S': standardabw(); break; case 'o': case 'O': MinMax_a(); break; case 'p': case 'P': MinMax_a(); break; case 'v': case 'V': printf("\n\n\tP R O G R A M M -/- V E R L A S S E N!\n\n"); break; default: printf("Fehler im Switch!"); } } } void Business::eingabe(){ char monate[12][12] = {"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember" }; for(j=1;j<=1;j++) { printf( "\nBitte geben Sie die Umsaetze fuer Unternehmen A ein:\n" ); for(i=0;i<=11;i++) { do{ printf("Bitte %i -ten Umsatz fuer %s 2007\n",i+1,monate[i]); printf("Eingabe:");fflush(stdin); cin >> umsatz_unternehmen[i][0]; } while(umsatz_unternehmen[i][0] < 0 ); } printf( "\nBitte geben Sie die Umsaetze fuer Unternehmen B ein:\n" ); for(i=0;i<=11;i++) { do{ printf("Bitte %i -ten Umsatz fuer %s 2007\n",i+1,monate[i]); printf("Eingabe:");fflush(stdin); cin >> umsatz_unternehmen[i][1]; } while(umsatz_unternehmen[i][1] < 0); } } } void Business::ausgabe(){ char monate[12][12] = {"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember" }; printf("\n\n"); printf("--------------------------------------------------------------------------------\n"); printf(":::::::::::::::::::::Filiale A:::::::::::::::::::Filiale B::::::::::::::::::::::\n"); for (i=0; i<=11; i++) { printf("%5i. %10s 2007 %10.2f EU",i+1 ,monate[i],umsatz_unternehmen[i][0]); printf("%5i. %10s 2007 %10.2f EU",i+1 ,monate[i],umsatz_unternehmen[i][1]); printf("\n"); } printf("\n--------------------------------------------------------------------------------"); } void Business::mittelwert(){ summe_1 = 0, summe_2 = 0, mittelwert_1 = 0, mittelwert_2 = 0; for (i = 0; i <=11; i++) { summe_1 += umsatz_unternehmen[i][0]; } mittelwert_1 = summe_1/=12; for(i = 0; i < 11; i++) { summe_2 +=umsatz_unternehmen[i][1]; } mittelwert_2 = summe_2/=12; printf("\nMittelwert Filiale |A|:%.2f",mittelwert_1); printf("\nMittelwert Filiale |B|:%.2f",mittelwert_2); } void Business::standardabw(){ summe_1 = 0, summe_2 = 0, mittelwert_1 = 0, mittelwert_2 = 0; stdabw_1 = 0, stdabw_2 = 0; for (i = 0; i <=11; i++) { summe_1 += umsatz_unternehmen[i][0]; } mittelwert_1 = summe_1/=12; for(i = 0; i < 11; i++){ summe_2 +=umsatz_unternehmen[i][1]; } mittelwert_2 = summe_2/=12; // Berechnung Standardabweichung Filiale A for(i = 0; i <=11; i++) { stdabw_1 += (umsatz_unternehmen[i][0] - mittelwert_1)*(umsatz_unternehmen[i][0] - mittelwert_1); } stdabw_1 /= 12; stdabw_1 = sqrt( stdabw_1 ); // Berechnung Standardabweichung Filiale B for(i = 0; i <=11; i++){ stdabw_2 += (umsatz_unternehmen[i][1] - mittelwert_2)*(umsatz_unternehmen[i][1] - mittelwert_2); } stdabw_2 /= 12; stdabw_2 = sqrt( stdabw_2 ); // Ausgabe Standardabweichungen A & B printf("\nStandardabweichung der Umsaetze Filiale |A|:%.2f\n",stdabw_1); printf("\nStandardabweichung der Umsaetze Filiale |B|:%.2f\n",stdabw_2); } void Business::MinMax_a(){ min = umsatz_unternehmen[i][0]; max = umsatz_unternehmen[i][0]; for(i = 0; i <=11; i++) { if ( min > umsatz_unternehmen[i][0] ) min = umsatz_unternehmen[i][0]; } for (i = 0; i <=11; i++) { if (umsatz_unternehmen[i][0] > max) max = umsatz_unternehmen[i][0]; } printf("\t\nMinimal Umsatz Filiale |A|: %.2f ",min); printf("\t\nMaximal Umsatz Filiale |A|: %.2f ",max); } void Business::MinMax_b(){ min = umsatz_unternehmen[i][1]; max = umsatz_unternehmen[i][1]; for (i = 0; i <= 11; i++) { if ( min > umsatz_unternehmen[i][1] ) min = umsatz_unternehmen[i][1]; } for(i = 0; i <=11; i++) { if (umsatz_unternehmen[i][1] > max) max = umsatz_unternehmen[i][1]; } printf("\t\nMinimal Umsatz Filiale |A|: %.2f ",min); printf("\t\nMaximal Umsatz Filiale |B|: %.2f ",max); } void Business::filewrite(){ }
-
Wann lernst du endlich, nur den relevanten Code zu posten? Ich hab dich in diesem Thread bereits zwei Mal darauf hingewiesen. Dein letzter Code ist schon wieder 290 Zeilen lang! Und die 85 deines vorletzten sind auch hart an der Grenze.
So langsam vergeht mir echt die Lust, dir zu helfen, ich will mich nicht jedes Mal durch deinen Code wühlen. Sicher geht es einigen andern hier auch so.

Nochmals. Du musst nicht immer deinen ganzen eigenen Code posten, sondern ein kleines Beispielkonstrukt, das auch zeigt, was wirklich entscheidend ist. Das bedeutet, entweder allen Code, der mit der konkreten Fragestellung nichts zu tun hat, zu entfernen oder einen sinngemässen Codeteil zu posten, der die Fragestellung verdeutlicht. Was bringen uns deine 12 Klassenvariablen und 9 Memberfunktionen, wenn du etwas über CSV-Exportierung wissen willst?
Vorgestern habe ich geschrieben:
Nexus schrieb:
Es wäre ausserdem sehr hilfreich, wenn du in Zukunft deinen grundlegenden Aufbau in wenigen Sätzen schildern könntest. Es hat nicht jeder Lust, 328 Zeilen Code zu lesen.
Nexus schrieb:
Im Weiteren ist dein jetztiger Code immer noch um einiges zu lang. Es wäre manchmal auch praktisch, wenn du nicht immer deine aktuellen Probleme bringen würdest, sondern vereinfachten Beispielcode, der nur dazu dient, das Prinzip aufzuzeigen.
-
Nexus schrieb:
...
Das würde ich auch meinen. Vor allem und das ist der Clue an der Sache lernst du, wenn du dich auf deine Fehler konzentrieren musst, dich mit deinem Code auseinander zu setzen und dann findest du den Fehler auch von alleine. Wenn du es schaffst ein Beispiel zu machen, dass 20-30 Zeilen Code hat (maximal), dann solltest du den Fehler (Denkproblem) finden, oder du hast wirklich ein Problem und wir helfen dir gerne auf die Sprünge, aber wenn du immer so viel Code postest, schaut das niemand mehr durch, darauf kannst du dich verlassen.
-
wann lernt ihr endlich das hasso ein professioneller troll ist?
-
dein vater ist ein troll du schwuchtel
-
dein pimmel ist ein wichser du modell
-
deine mama hat 2 eier

-

-
hasso schrieb:
dein vater ist ein troll du schwuchtel
hasso schrieb:
deine mama hat 2 eier

Damit hast du dir die Möglichkeit, unterstützt zu werden - zumindest von mir - endgültig vertan.
Von daher kann ich folgender Aussage nur zustimmen:
troll_industries schrieb:
wann lernt ihr endlich das hasso ein professioneller troll ist?
Übrigens interessant, wie andere User zu deiner Art Stellung nehmen (ihr braucht nur mal im C-Forum unter dem Benutzernamen hasso/hassun zu suchen):
Ja, gibt genug Sachen, die geändert werden sollten/müssten. Dazu verweise ich einfach auf die 20 anderen Threads, die du zu dem gleichen Programm gestellt hast und wo du die Antworten von den Leuten ignoriert hast. Mit anderen Worten: Mach nen Abgang du Troll.
Also erstmal sollte man das Ergebniss von malloc/calloc NICHT casten.
Gut, dass du das nochmal erwähnt hast. Wurde ihm ja erst 30 Mal in älteren Threads gesagt. Scheinbar ist das doch zu schwer zu verstehen
also hasso, ich bin erstaunt, wie lernresistent du bist, ehrlich. Hast du denn nichts aus all unseren Antworten zu deinen Datum-Problemen gelernt?
main darf NIEMALS void sein, das ist (glaub ich) das 3. Mal, dass ich es dir sage.
Mein Gott, jemanden wie dich habe ich noch nie gesehen und ich bin schon eine lange Weile hier Mitglied. Jemanden so lernresisten kann es wirklich nicht geben. Kannst du denn nicht die Antworten lesen, die wir schreiben??? Wieso postest du wieder den langen unnötigen Code, wenn ich dir einen sauberen Code gegeben hab, damit du dich damit auseinander setzt und vielleicht etwas daraus lernst. Du bist echt ein hoffnungloser Fall, ich geb's auf, du bist eher nicht mehr zu retten/helfen.
verdammt hasso, lerne endlich unsere Beiträge zu lesen und keine 100 Thrads für ein und dasselbe Problem zu erstellen. Siehe http://www.c-plusplus.net/forum/viewtopic-var-t-is-212629-and-highlight-is-.html
er troll doch nur rum und lacht euch aus. so doof, wie er tut, kann keiner sein.
Tjo, zu blöd, um sich Compilefehlermeldungen mal genauer anzuschauen und dann noch rotzfrech werden, wenn man fordert, Eigeninitiative zu zeigen. Du wirst mal ein ganz Großer

Dieser Thread zeigt seine Umgangsformen jedoch am besten auf.
Ich denke, da erübrigt sich jeglicher Kommentar. hasso, du wirst dich wohl nie ändern - dein Problem. Mit meiner Hilfe musst du in Zukunft aber nicht mehr rechnen.
-
hasso schrieb:
deine mama hat 2 eier

Hasso Fuß! Hasso Platz!
Welcher Wärter hat dich Töle denn schon wieder rausgelassen? Jetzt geht es wieder ab in den Zwinger.