Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Rätselecke » Kleine nette Übung ( Kopierkonstruktor, delete, ... )

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.06.2008, 08:53 Uhr
~Der Rätsler
Gast


Hier habt ihr mal eine Übung, die ich persönlich sehr nett fand. Dabei wurde einem einiges klar, zumindest ging es mir so ;-)
------------------------------------------------------------------------------------------

Versuchen Sie heraus zu finden, was das folgende Programm macht und beantworten Sie die Fragen.

Beispiel für Programmlauf:


Herbart 1
Mueller 2
Schmidt 2
Seghardt 1
0 0

Auflistung aller Studenten:

1. Herbart
2. Mueller
3. Mueller
4. Schmidt
5. Schmidt
6. Seghardt

Anzahl Studenten: 6



C++:
/*
Erzeugung einer Liste der Nachnamen von Studenten eines Semesters
Anwendung des Kopierkonstruktors, new und delete
*/


#include <iostream>
#include <vector>
#include <string>
using namespace std;

class Name {
private:
    string str;
    int iNummer; // 1.
public:
    // Standardkonstruktor
    Name () : iNummer(++iAnzahl){ // 2.
    }
    // Kopierkonstruktor
    Name (Name & const objekt) : iNummer(++iAnzahl){ // 3.
        str = objekt.str;
    }

    void setName(string str){
        this->str = str; // 4.
    }

    string getName(){
        return str;
    }

    int const getNummer() {
        return iNummer;
    }

    static int iAnzahl;
};

int Name::iAnzahl = 0;

int main() {
    string str;
    int iAnzahl;
    vector<Name *> pvecName; // 5.
    while (true) {
        cout << "Nachname und Anzahl (Ende 0 0): ";
        cin >> str >> iAnzahl;
        // iAnzahl ist nicht gleich Name::iAnzahl
        if (!iAnzahl) // 6.
            break;
        pvecName.push_back(new Name); // 7., 8., 9.
        pvecName.back()->setName(str); // 10., 11.

        for (int j = 1; j < iAnzahl; j++) { // 12.
            pvecName.push_back(new Name(*(pvecName.back()))); // 13.
        }

    }

    cout << "Ausgabeliste der Studenten:\n" << endl;

    for (size_t k  = 0; k < pvecName.size(); ++k) {
        cout << pvecName.at(k)->getNummer() << ". " << \
            pvecName.at(k)->getName() << endl;
    }
    cout << endl;
    cout << "Anzahl Studenten: " << Name::iAnzahl << endl;

    for (k  = 0; k < pvecName.size(); ++k) {
        delete pvecName.at(k); // 14.
    }
    return 0;
}




1. Warum enthält die Klasse zwei Variablen iNummer und iAnzahl, anstatt nur eine?

2. Wie ist diese Konstruktion zu verstehen? ": iNummer(++iAnzahl)"

3. Was würde in der Programmausgabe verändert, wenn der Kopierkonstruktor durch einen Standardkopierkonstruktor ersetzt würde, und warum?

4. Warum wird hier der this-Zeiger angewandt und wie müsste man die Methode ändern, damit er überflüssig wird?

5. Was wird in dieser Zeile erzeugt?

6. Wofür wird diese if-Abfrage benötigt?

7. Was bewirkt die Methode push_back() hier?

8. was macht "new Name"?

9. Warum stehen hinter "Name" in diesem Fall keine Klammern?

10. Was bewirkt die Methode back() ?

11. Was bedeuten in dem Ausdruck "pvecName.back()->setName(str)" der Punkt und der Pfeil?

12. Beschreiben Sie den Sinn dieser Schleife für die Programmausgabe.

13. Beschreiben Sie diese Konstruktion: "new Name(*(pvecName.back())" und gehen Sie dabei auch auf den Stern ein.

14. Warum wird hier nicht delete [] sondern nur delete verwendet?

15. Beschreiben Sie den Gesamtablauf des Programms in ca. 3 bis 8 Sätzen, ohne auf die programmiertechnischen Details einzugehen..
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.06.2008, 10:26 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Ziemlich erbärmlicher Versuch sich die Hausaufgaben von anderen machen zu lassen indem man so tut als ob man die selbst schon gemacht hat
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Rätselecke ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: