Size: 3788
Comment:
|
Size: 997
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
== Fragen und Kommentare zur 5. Vorlesung / zum 5. Übungsblatt == | == Fragen und Kommentare zur 8. Vorlesung / zum 8. Übungsblatt == |
Line 3: | Line 3: |
@Ben: Auf die Membervariablen ''_size'' und ''_elements'' brauchen Sie für dieses Übungsblatt keinen Zugriff. Deswegen können Sie auch ''private'' sein (sollten Sie sowieso) und Sie brauchen auch keine spezielle ''get'' oder ''set'' Methode. Nur die Memberfunktionen brauchen Zugriff auf diese Membervariablen, und den habe Sie ja sowieso, d.h. Sie können z.B. in parseListOfIntegers einfach schreiben ''_size = listSize'' oder sowas. '''Hannah 20Mai10 19:28''' | @Simson + Alle: Nein, Sie brauchen sich nicht um das kümmern, was Sie "Typsicherheit" nennen. '''Hannah 18Jun10 01:02''' |
Line 5: | Line 5: |
@Heinke: Ja, genau, siehe mein code snippet in der Antwort an SebastianD. '''Hannah 20Mai10 19:23''' | Mit new oder malloc allozierter Speicher wird nicht automatisch mit 0en initialisiert. Es macht also keinen Sinn diesen Speicher auf irgeneinen Inhalt zu testen. Wenn du den Speicher 0en willst: man memset. '''Jens 17Jun10 23:13''' |
Line 7: | Line 7: |
@SebastianD: Berechtigte Frage. Ich würde es so machen: | Irgendwie steh ich grad auf dem Schlauch. in meinem Konstruktor heißt es {{{ _elements = new T[MAX_ARRAY_SIZE];}}} und in meinem Test {{{ ASSERT_EQ(NULL, set._elements[0]);}}} und Hudson meldet immer {{{ [ RUN ] SetTest.constructor SetTest.cpp:12: Failure Value of: set._elements[0] Actual: 1 Expected: __null Which is: 0}}} Was ist da los? '''Simson 17Jun10 22:37''' Sollen wir auch für "Typsicherheit" sorgen, also soll bei sowas wie |
Line 9: | Line 20: |
void ListOfIntegers::getInterleaveOf(const ListOfIntegers& list1, const ListOfIntegers& list2); | Set<int> set; set.insert('a'); |
Line 11: | Line 23: |
und dann in der ''main'' Funktion: {{{ ListOfInteger list1; ListOfInteger list2; list1.parseFromString(list1AsString); list2.parseFromString(list2AsString); list1.print("Input list 1 : "); list2.print("Input list 2 : "); ListOfInteger result; result.getInterleaveOf(list1, list2); result.print("Result list : "); }}} Die Version von Ben ist aber auch eine Variante die man in diesem Kontext öfter sieht. Ich würde die Methode dann allerdings ''interleaveWith'' nennen, man sollte das bei der objekt-orientierten Programmierung immer wie einen (einfachen) Satz lesen könnten. Die Variante hat halt den Nachteil, dass dann die eine Liste überschrieben wird, deswegen gefällt mir die oben besser. '''Hannah 20Mai10 19:14''' @Hannah: Ah. Verstehe. Mit anderen Worten, ich muss also für jede Liste eine Instanz des Objektes erstellen. Oder sehe ichs immer noch falsch? '''Heinke 20Mai10 18:23''' Für mich klingt es nach Version 1: {{{ ListProcessing list1; [...] ListProcessing list2; [...] list1.interleave(list2); // Danach list1 ausgeben }}} Nur muss man sich dann imho Gedanken über die Sichtbarkeit von _size und _elements machen oder eine set/get Methode implementiern...'''Ben 20Mai10 17:36''' Ich bin mir im Unklaren über die genaue Funktionsweise der neuen Interleave-Methode, da mir selbst spontan mehrere verschiedene Möglichkeiten einfallen:<<BR>> 1. void interleaveWith(ListOfIntegers list); // Die Elemente dieser Liste werden mit der Argumentliste vermischt (oder was auch immer).<<BR>> 2. ListOfIntegers interleaveWith(ListOfIntegers list); // siehe 1., nur dass die Argumente jetzt in einer neuen Liste gespeichert und diese zurück gegeben wird.<<BR>> 3. void interleave(ListOfIntegers list1, ListOfIntegers list2); // Speichert die Elemente der beiden Argumentlisten vermischt in dieser Liste (Liste vorher leeren?).<<BR>> 4. ListOfIntegers interleave(ListOfIntegers list1, ListOfIntegers list2); // Idealerweise sogar static. Speichert die Elemente der beiden Argumentlisten vermischt in einer neuen Liste und gibt diese zurück.<<BR>> 5. void interleaveWith(ListOfIntegers result, ListOfIntegers list); // C-Style. Man übergibt außerdem eine Liste, in der die Elemente dann gespeichert werden sollen.<<BR>> 6. ...<<BR>> Welche davon? '''SebastianD 20Mai10 14:24''' @Heinke: Für Aufgabe 1 vom neuen Übungsblatt soll das Programm exakt dasselbe machen, die Ihr Programm vom 4. Übungsblatt, nur soll das Programm mit Klassen realisiert sein, wie in der Vorlesung vorgemacht, und die Felder (die jetzt Membervariablen sind), sollen keine fixe Größe ''MAX_LIST_SIZE'' mehr haben, sondern genau die Größe, die benötigt wird. Beantwortet das Ihre Frage? '''Hannah 20Mai10 12:46''' Verstehe ich das richtig: Der Benutzer soll ./ListProcessingMain "1,1,1,1" "2,2,2,2,2" aufrufen und anschließend sollen die Listen intern geparsed, interleaved und als array im Objekt gespeichert werden? '''Heinke 20Mai10 9:28 ''' |
mit Fehlermeldung abgebrochen werden? '''Simson 17Jun10 22:32''' |
Fragen und Kommentare zur 8. Vorlesung / zum 8. Übungsblatt
@Simson + Alle: Nein, Sie brauchen sich nicht um das kümmern, was Sie "Typsicherheit" nennen. Hannah 18Jun10 01:02
Mit new oder malloc allozierter Speicher wird nicht automatisch mit 0en initialisiert. Es macht also keinen Sinn diesen Speicher auf irgeneinen Inhalt zu testen. Wenn du den Speicher 0en willst: man memset. Jens 17Jun10 23:13
Irgendwie steh ich grad auf dem Schlauch. in meinem Konstruktor heißt es
_elements = new T[MAX_ARRAY_SIZE];
und in meinem Test
ASSERT_EQ(NULL, set._elements[0]);
und Hudson meldet immer
[ RUN ] SetTest.constructor SetTest.cpp:12: Failure Value of: set._elements[0] Actual: 1 Expected: __null Which is: 0
Was ist da los? Simson 17Jun10 22:37
Sollen wir auch für "Typsicherheit" sorgen, also soll bei sowas wie
Set<int> set; set.insert('a');
mit Fehlermeldung abgebrochen werden? Simson 17Jun10 22:32