Jaipur Geschrieben 12. März 2002 Geschrieben 12. März 2002 Hi, folgnedes muster: class a { ... }; class b: public a { ... }; bei mir hat jetzt die Klasse a die Operatoren + und ! überladen, kann die vererbte Klasse b diese auch benutzen? Bei mir zumindest nicht :-( Zitieren
Woodstock Geschrieben 12. März 2002 Geschrieben 12. März 2002 In meinem Buch steht dazu: Nicht alle Ingredienzien, die für eine Klasse bei Ihrer Definition spezifiziert werden können, werden auch an abgeleitet Klassen weitergegeben. Zu diesen nichtvererbbaren Dingen gehören u.a. Konstruktoren, Destruktoren und Zuweisungsoperatoren. Ebenfalls von der Vererbung ausgeschlossen sind die friend-Beziehungen, in der Klassen zu Funktionen oder anderen Klassen stehen können Dem entnehme ich, das Deine beiden überladenen Operatoren auch in der abgeleiteten Klasse genutzt werden können (korrigiert mich bitte falls das nicht so ist). Bine Zitieren
Jaipur Geschrieben 12. März 2002 Autor Geschrieben 12. März 2002 Hi, lese ich da richtig heraus, das friend Beziehungen ebenfalls ausgeschlossen sind? Zitieren
Klotzkopp Geschrieben 12. März 2002 Geschrieben 12. März 2002 Original geschrieben von Jaipur lese ich da richtig heraus, das friend Beziehungen ebenfalls ausgeschlossen sind? Ganz genau, "Freundschaften" werden nicht vererbt. Das hat mich auch schon ein paar mal genervt Zitieren
Crush Geschrieben 12. März 2002 Geschrieben 12. März 2002 Die friends muß man halt immer explizit in der Basisklasse angeben, aber die Operatoren werden vererbt. class test { friend class frtest; // muß in der Basis stehen, weil nicht vererbbar friend class afrtest; int x; public: test(int v=0):x(v){} ~test(){} int getfriend() {return x;} operator<<(test& v) {this->x=v.getfriend();} }; class frtest : public test { public: frtest(int l=0){x=l;} ~frtest(){} }; class afrtest : public frtest { public: afrtest(int l=0){x=l;} ~afrtest(){} }; void meinefunc() { int v1,v2,v3; test a(5); frtest b(3); afrtest c(1); v1=a.getfriend(); v2=b.getfriend(); v3=c.getfriend(); c<<b; // funktioniert! v3=c.getfriend(); } Zitieren
Jaipur Geschrieben 12. März 2002 Autor Geschrieben 12. März 2002 Hi, wäre das O.K. wenn ich meine Aufgabe hier posten würde? Sind aber allerdings ca. 100 Zeilen ... ? Zitieren
Crush Geschrieben 12. März 2002 Geschrieben 12. März 2002 Warum nicht - bei Programm-Problemen ist es immer besser mal in den Source reinschauen zu können. Hat das oben bis jetzt nix gebracht? Zitieren
Jaipur Geschrieben 13. März 2002 Autor Geschrieben 13. März 2002 Hi, ob es was gebracht? Urteile selber! Es ist eine alte Klausur Aufgabe, bei mir ist wohl ein bissel mehr dabei, aber das ist nur dafür das ich auch sehe was ich da mache. Ein Schwarz-Weiß-Icon ist eine Bitmap von 16X16 Pixeln, die jeweils den Farbwert schwarz ( 0 ) oder weiß ( 1 ) haben können. Erstellen Sie eine Klasse icon, die einen solchen Icon repräsentiert und folgende Funktionen beinhaltet: a ) ein Konstruktor, der das Icon komplett weiß initialisiert b ) einen Operator + der aus zwei Icons ein neues erzeugt, indem er die schwarzen Teile übereinander zeichnet. c ) einen Operator !, der das Icon invertiert (also von schwarz weiß macht und aus weiß schwarz). d ) eine Memeberfunktion compare, die das Icon vergleicht und das Ergebnis ( 1=gleich, 0=ungleich) zurückgibt. Erstellen Sie eine Verfeinerung frameicon vin icon, bei der dafür gesorgt ist, dass ein Icon immer einen schwarzen, ein Pixel breiten Rand hat. Passen Sie die unter a) bis d) erstellten Funktionen und Operatoren, falls erforderlich, an diese neue Situation an. # include <iostream.h> # define SCHWARZ 0 # define WEISS 1 int maske1[16][16] = { {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1}, {1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1}, {1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1}, {1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1}, {1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1}, {1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1}, {1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1}, {1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1}, {1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, }; int maske2[16][16] = { {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1}, {1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1}, {1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1}, {1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, }; int maske3[16][16] = { {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1}, {1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1}, {1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1}, {1,1,0,1,1,0,0,1,1,0,0,1,1,0,1,1}, {1,0,1,1,1,0,0,1,1,0,0,1,1,1,0,1}, {1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,1}, {1,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1}, {1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1}, {1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1}, {1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1}, {1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, }; class icon { friend icon operator+( icon i1, icon i2); friend icon operator!( icon i); protected: int bitmap[16][16]; public: icon( int f=WEISS); /* initialisiert ein icon */ icon( int x[][16]); /* kopiert "bitmuster" als icon */ int compare( icon i1, icon i2); void show(); }; icon operator+( icon i1, icon i2) { icon x; int i,j; for( i=0; i<16; i++) for( j=0; j<16; j++) x.bitmap[i][j] = i1.bitmap[i][j] && i2.bitmap[i][j]; return x; } icon operator!( icon x) { icon y; int i,j; for( i=0; i<16; i++) for( j=0; j<16; j++) y.bitmap[i][j] = x.bitmap[i][j]^1; return y; } icon::icon( int x[][16]) { int i,j; for( i=0; i<16; i++) for( j=0; j<16; j++) bitmap[i][j]=x[i][j]; } icon::icon( int f) { int i,j; for( i=0; i<16; i++) for( j=0; j<16; j++) bitmap[i][j]=f; } void icon::show() { int i,j; for( i=0; i<16; i++) { for( j=0; j<16; j++) { if( bitmap[i][j] == WEISS ) cout << '*'; else cout << ' '; } cout << endl; } cout << endl; } int icon::compare( icon i1, icon i2) { int i,j; for( i=0; i<16; i++) for( j=0; j<16; j++) { if( i1.bitmap[i][j] != i2.bitmap[i][j]) return 0; } return 1; } class frameicon: public icon { public: frameicon( int rf=SCHWARZ, int ff=WEISS); }; frameicon::frameicon( int rf, int ff) { int i,j; for( i=0; i<16; i++) { for( j=0; j<16; j++) { if( i==0 || j==0 || i==15 || j==15) bitmap[i][j]=rf; else bitmap[i][j]=ff; } } } int compare( icon i1, icon i2) { if( i1.compare(i1,i2)) return 1; else return 0; } void main() { icon m1( maske1); icon m2( maske2); icon m3( maske3); icon m; frameicon fi1; frameicon fi2; /* if( compare( m1,m2)) cout << "gleich" << endl; else cout << "ungleich" << endl; if( compare( fi1,fi2)) cout << "gleich" << endl; else cout << "ungleich" << endl; */ m= m1+m2; m=!m; m.show(); m=fi1+fi2; m=!m; m.show(); } Die Smilies waren in einem Karo-Muster in der Aufgabenstellung so gezeichnet, nicht als einsen und nullen sondern als schwarz-weiße Karte ... Zitieren
Crush Geschrieben 13. März 2002 Geschrieben 13. März 2002 Ich habe das ganze mal versucht irgendwie zum Laufen zu bekommen. Deine Frames wurden nicht richtig gezeichnet, weil Du mit der Invertierung gearbeitet hast. Man benötigt einen FrameIcon-kompatiblen Operator= und den Rahmen muß man beim Kopiervorgang für das FrameIcon-Objekt natürlich dann gleichzeitig dazufügen und nicht stur rüberkopieren. Sonst wird das FrameIcon ja ein normales Icon-Objekt!!! An den Protected-Part kommt man nur durch eine Friend deklaration ran oder eine Funktion, die diesen Member-Bereich indirekt weiterreicht. Hier kommt nämlich nur der Icon-Part ran! Beim Erstellen eines Frameicons muß man die Initialisierung des Icon-Teils durch die Initialisierungsliste realisieren. Alles klar? #include "stdafx.h" # define SCHWARZ 0 # define WEISS 1 int maske1[16][16] = { {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1}, {1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1}, {1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1}, {1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1}, {1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1}, {1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1}, {1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1}, {1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1}, {1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, }; int maske2[16][16] = { {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1}, {1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1}, {1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1}, {1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, }; int maske3[16][16] = { {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1}, {1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1}, {1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1}, {1,1,0,1,1,0,0,1,1,0,0,1,1,0,1,1}, {1,0,1,1,1,0,0,1,1,0,0,1,1,1,0,1}, {1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,1}, {1,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1}, {1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1}, {1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1}, {1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1}, {1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, }; class icon { friend class frameicon; // sonst kommt man an die protected-Elemente nicht ran friend icon operator+( icon i1, icon i2); friend icon operator!( icon i); protected: int bitmap[16][16]; public: icon( int f=WEISS); /* initialisiert ein icon */ icon( int x[][16]); /* kopiert "bitmuster" als icon */ int compare( icon i1, icon i2); void show(); }; icon operator+( icon i1, icon i2) { icon x; int i,j; for( i=0; i<16; i++) for( j=0; j<16; j++) x.bitmap[i][j] = i1.bitmap[i][j] & i2.bitmap[i][j]; return x; } icon operator!( icon x) { icon y; int i,j; for( i=0; i<16; i++) for( j=0; j<16; j++) y.bitmap[i][j] = x.bitmap[i][j]^1; return y; } icon::icon( int x[][16]) { int i,j; for( i=0; i<16; i++) for( j=0; j<16; j++) bitmap[i][j]=x[i][j]; } icon::icon( int f) { int i,j; for( i=0; i<16; i++) for( j=0; j<16; j++) bitmap[i][j]=f; } void icon::show() { int i,j; for( i=0; i<16; i++) { for( j=0; j<16; j++) { if( bitmap[i][j] == WEISS ) cout << '*'; else cout << ' '; } cout << endl; } cout << endl; } int icon::compare( icon i1, icon i2) { int i,j; for( i=0; i<16; i++) for( j=0; j<16; j++) { if( i1.bitmap[i][j] != i2.bitmap[i][j]) return 0; } return 1; } class frameicon: public icon { public: frameicon( int rf=SCHWARZ, int ff=WEISS); frameicon(int x[][16]):icon(x){} // Das Bitmap-Element muß initialisiert werden frameicon operator=(icon v); // frameicon& operator=(icon v){return static_cast<frameicon&>(v);} // klappt nur bei einzelner Zuweisung und wäre eine "harte" Methode }; frameicon frameicon::operator=(icon v) { int i,j,rf=SCHWARZ, ff=WEISS; for( i=0; i<16; i++) for( j=0; j<16; j++) { if( i==0 || j==0 || i==15 || j==15) bitmap[i][j]=ff; else bitmap[i][j] = v.bitmap[i][j]; // Beim Zuweisen eines Icon auf einen FrameIcon muß der Rand noch dazugefügt werden! // ansonsten würde ein bestehender Rand ja gelöscht werden (logisch, oder?) } return *this; } frameicon::frameicon( int rf, int ff) { int i,j; for( i=0; i<16; i++) { for( j=0; j<16; j++) { if( i==0 || j==0 || i==15 || j==15) bitmap[i][j]=ff; else bitmap[i][j]=rf; } } } int compare( icon i1, icon i2) { if( i1.compare(i1,i2)) return 1; else return 0; } void main() { icon m1( maske1); icon m2( maske2); icon m3( maske3); icon m; frameicon fi1(maske1); frameicon fi2(maske2); frameicon fi3(maske3); frameicon n; /* if( compare( m1,m2)) cout << "gleich" << endl; else cout << "ungleich" << endl; if( compare( fi1,fi2)) cout << "gleich" << endl; else cout << "ungleich" << endl; */ m= m1+m2; m=!m; // m.show(); // fi2.show(); // fi2.show(); // n=static_cast<frameicon&>(m); // wieder ein paar "brutale" Methoden, die auch nur // n=static_cast<frameicon&>(!m=fi1+fi2); // bedingt funktionieren // n=static_cast<frameicon&>(!m); // fi1.show(); n=fi1+m2; // jetzt darf man auch alles mischen n=!n; n.show(); } Zitieren
Jaipur Geschrieben 14. März 2002 Autor Geschrieben 14. März 2002 Hi, was mich allerdings noch brennend interessieren würde, halt mich jetzt ruhig für Frech wenn ich das von Dir verlange, aber wie hättest Du die Aufgabe gelöst? Ich meine wie hättest Du die Klasse(n) und ihre Memberfunktionen aufgebaut? Zitieren
Crush Geschrieben 14. März 2002 Geschrieben 14. März 2002 1. hätte ich die Bitmap-Inhalte per Zeiger definiert, was als Zeiger definierbar ist, damit man die Icons auch im Betrieb wechseln kann oder sogar mehrere Icon-Objekte auf eine Maske zeigen lassen könnte. Das Ändern der Maske würde somit bei allen Icons soz. automatisch erfolgen, was ich für gut halte. Vielleicht würde ich beide Möglichkeiten einbinden: Per Referenz und per Value mit eigenem Maskeninhalt, das müßte aber dann abfragbar sein. 2. Den Frame hinzuzufügen, bzw. Zeichnen hätte ich als eigenständige Methode in FrameIcon definiert und bei jeder Art von Kopie dann explicit aufgerufen, damit der auch immer da ist und nicht weginvertiert werden kann, weil es ja dann kein echtes Frameicon mehr wäre - das ist natürlich eine Designfrage. 3. Die Höhe, Breite und Bit-Tiefe der Icons hätte ich noch als Member-Variablen angegeben, damit man keine rein statischen Icons haben muß. Vielleicht auch noch x,y-Positionen, etc., was man halt für eine ordentliche Darstellung benötigt. 4. Den Masken hätte ich auch noch einen Masken-Header zugefügt, anhand derer man den Maskeninhalt herausfinden und in die flexiblen Icon-Objekte einfügen kann. 5. Darstellungsmethoden wie show() würde ich möglichst virtuell definieren, damit man das ganze einfach auf eigene Darstellungsroutinen umschreiben kann. 6. Einen eigenen Namespace zu definieren ist auch nix dummes, weil ICON & FRAMEICON schon woanders verwendet sein könnten - nur um Namenskonflikten schon im Vorfeld auszuweichen. Natürlich mit eigener .h und .cpp 7. Funktionsaufrufe würde ich soweit möglich nur mit Referenzen und Zeigern - nicht mit Kopien wenn auch anders möglich - realisieren, damit keine unnötige Stackbelastung auftritt. 8. Const hast Du praktisch nirgendwo verwendet. Bei allen Lesezugriffen oder Parametern, die nicht selbst verändert werden dürfen, sollte man const einsetzen, damit keine unerlaubten Änderungen von Daten vorgenommen werden können. 9. Die friend-Lösung wäre für mich ok, aber nicht unbedingt befriedigend, weil da zuviel Humbug mit angestellt werden könnte und Fehler schwerer lokalisierbar sind. Wenn man wirklich sicher gehen will, sollte man vielleicht in Icon zusätzliche protected I/O-Methoden zur Verfügung stellen und in Frameicon nur über diese darauf zugreifen. Friends heben ja Klasseneinschränkungen direkt auf - deshalb sollte man sie nur verwenden, wenn es absolut unausweichlich ist und zwar bei Klassen, die nicht direkt im Zusammenhang stehen aber aus Performance-Gründen direkten Zugriff benötigen (weiß aber jeder, daß dann irgendwo im Klassendesign der Wurm drin ist). Friend-Operatoren sind dagegen u.U. sehr sinnvoll. Wie gesagt ist das halt eine Performance-Frage. Ich muß jetzt leider weg, aber das waren die ersten Dinge, die mir so auf Anhieb eingefallen sind. Vielleicht fällt mir später nochmal was ein. CU! Zitieren
Jaipur Geschrieben 14. März 2002 Autor Geschrieben 14. März 2002 Hi, ich wollte das daher so gerne wissen, weil ich so selten bzw. nie fremden Quelltext sehe. Du solltest aber bedenken das Du, in einer Klausur, noch neun andere Aufgaben zu lösen hast und außerdem hast Du auch nur 3 Stunden Zeit dafür Würde mich auch echt rießig darüber freuen, wenn Du den Code dafür mal schreiben würdest. Die Show Funktion und die Masken sind echt unwichtig, was "schnelleres" viel mir nicht ein, gehören auch nicht zur Aufgabe. Nur damit auch was zu sehen habe ... Cu Erhan Zitieren
Crush Geschrieben 14. März 2002 Geschrieben 14. März 2002 So viel anders hätte ich es auch nicht unbedingt gemacht, deshalb können wir uns das sparen. . Das ganze nochmal aufzurollen ist überflüssig, weil ich das ok finde - sind ja auch nur Feinheiten, die ich dazufügen würde wie das Const. Ich finde Du hast das ganze ordentlich und praktisch fehlerfrei gelöst. Daß man 9 derartige Aufgaben in 3 Stunden lösen soll halte ich für unmenschlich. Das würde bedeuten: 20 Minuten für diese Aufgabe ... für Anfänger ist das fast ein Ding der Unmöglichkeit das fehlerfrei in der Zeit zu schaffen. Oder gab es eine andere Zeitvorgabe dafür? Wegen Sources: Die gibt´s im Internet schließlich massig ... ein Tipp wäre vielleicht auch einfach mal in der Bücherei nach Literatur für C/C++-Programmierung Ausschau zu halten und im Anhang kurz nachzuschlagen, weil da meistens steht, auf welcher Site man die ganzen enthaltenen Sourcecodes des Buchs runterladen kann. Ansonsten noch die Autoren-Homepage besuchen oder im Zweifelsfall den Verlag abklappern. Manchmal findet man sogar das ganze Printmedium zum freien Download. Was für eine Schule besuchst Du denn und wie lange lernt ihr schon C++? Zitieren
Jaipur Geschrieben 14. März 2002 Autor Geschrieben 14. März 2002 Hi, soso jetzt kann ich Dir mal eine Frage beantworten Ich finde Du hast das ganze ordentlich und praktisch fehlerfrei gelöst. Danke :WD Es sind nicht neun sondern ganze Zehn Aufagen, wir haben wirklich nur 3 Stunden Zeit für die Aufagen. Die Klausur ist immer nach dem gleichen Schema aufgebaut: - Logik und Boolsche Algebra Wahrheitstafel / Vereinfachung / C Programm - Bitoperationen prüfen / löschen / setzen - C Programmierung I Meistens müssen String-Funktionen nachgebaut werden - ohne string.h! - oder ein Sortierprogramm ... - C Programmierung II Meistens irgendwas Rekursives, nur Quellcode, und wir müssen erklären was die Funktion macht und das dann iterativ übersetzen. - Diskrete Mathematik, immer Kombinatorik n-k Permutation mit / ohne Wiederholung n-k Kombination mit / ohne Wiederholung Mit Erklärungen + Formeln und so ... - Leistungsanalyse Z.B. Sortieverfahren - Datenstrukturen I Stundenplan mit Titel, Typ (Vorlesung/Übung/Praktikum) der Veranstaltung usw ... mit 3 Teilfunktionen, eine die Prüft das es keine Überscheidungen gibt usw ... - Datenstrukturen Listen / Bäume / Hashtabellen ( nur eins davon ) C++ I - siehe Icon oder ähnliches ... C++ II, das kommt IMMER! Erklären Sie präzise + Beispiel was sind: Klasse, Instanz, Konstruktor/Destruktor, this-Pointer, überladener Operatoren/Memberfunktionen, einfache/mehrfache Vererbung, virtuelle Vererbung, Template und was es sonst noch so alles gibt .... aber nur 7-8 Stück dieser Art. Wenn es um Sources geht oder ähnliches geht, dann ist immer noch das Buch von unserem Prof. Dr. der Informatik das erste wo man nachschlagen sollte (!!!), wenn ich da was nicht verstehe kann ich den ganzen Tag ein anderes Buch in unserer Bibliothek suchen aber ich komme immer wieder auf sein Buch zurück. Es gibt kein besseres Buch, es hat aber 1000 Seiten, es lohnt sich jede einzelne Seite zu lesen! Es geht um C und C++, dabei wird ein glatter Strich zwischen C und C++ gezogen. Die Programmiersprache ist für Ihn nur ein Mittel zum Zweck, der kann einem wirklich alles bei bringen. Nur nicht die Praxis, dafür sind wir dann selber verantwortlich. Das Buch ist aber genauso so schwer wie genial - kann man von Ihm aber auch behaupten (der Mensch hat Mathe studiert) . In der FH lernen wir das 1. Semester C und das 2. Semester C++, im 3.Semester. Den Rest darf man sich aussuchen, weil ab dem 4.Semester fängt das Hauptstudium an. Also ich besuche eine Fachhochschule, Fachrichtung Elektrotechnik Studiengang Informations- und Kommunikationstechnik. Ab dem 4. Smester kann man zwischen Info- und Kommu- wählen, wollte gerne Info machen .... Zitieren
Crush Geschrieben 21. März 2002 Geschrieben 21. März 2002 WOW! Ich wäre froh, wenn das bei uns so abgegangen wäre. Da lernt man wenigstens was bei Euch (jedenfalls sieht´s für mich genauso aus, wie ich mir die Ausbildung herkömmlich vorgestellt habe). Da komm ich mir mit meiner Ausbildung ja vor wie der Looser der nix gelernt hat. Zum Glück konnte ich mir das alles aus meinen Büchern noch im Nachhinein raussaugen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.