[C/C++] Fragen zu C++

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von c2000, 30. Dezember 2008 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 30. Dezember 2008
    Fragen zu C++

    Ich habe hier ein paar Fragen zu C++ zu denen ich leider keine Antwort weiss

    Vielleicht kann der ein oder andere mir ein paar davon beantworten. Dürfte für C++ Profis kein Problem sein ^^


    1) Erläutere abstrakter Datentyp
    2) Klassen sind ineinander geschachtelt, in welcher Reihenfolge müssen sie die Konstruktoren aufrufen beim Anlegen des Objektes der äußersten Klasse?
    3)Wie könnte das nichtvorhandensein von Friends unschön umgangen werden?
    4)Wie wird bei mehrfach Vorhandenen und überladenen Konstruktoren einer
    Klasse die Eindeutigkeit beim anlegen des Objektes hergestellt? Nach welcher Regel wird welcher Konstruktor aufgerufen?
    5)In welchem Fall muss man den Kopierkonstruktor überladen?
    6)Wann muss man explizit einen Destruktor angeben?
    7)Wie realisiere Sie eine is-a-Relation zwischen Objekten?
    8)Wie realisiere Sie eine has-a-Relation zwischen Objekten?
     
  2. 30. Dezember 2008
    AW: Fragen zu C++

    1) Erläutere abstrakter Datentyp
    ein abstrakter datentyp ist eine klasse, die nur eine "Schnittstelle" bereitstellt, aber die Implementationen den Ableitungen überlässt. Kleines Beispiel:

    Code:
    class Base
    {
    public:
     virtual void machWas() = 0;
    };
    
    class Derived : public Base
    {
    public:
     void machWas() { std::cout << "machWas()" << std::endl; }
    };
    
    Derived a;
    a.machWas();
    
    //Base b; < funktioniert nicht, da man keine Instanzen von ADTs erstellen darf
    
    Base *b = new Derived;
    b->machWas(); // funktioniert
    
    2) Klassen sind ineinander geschachtelt, in welcher Reihenfolge müssen sie die Konstruktoren aufrufen beim Anlegen des Objektes der äußersten Klasse?
    Die innere Klasse wird zuerst konstruiert. Wieder ein Beispielprogramm:

    Code:
    #include <iostream>
    
    class Outer
    {
    public:
     class Inner
     {
     public:
     Inner() { std::cout << "Inner()" << std::endl; }
     ~Inner() { std::cout << "~Inner()" << std::endl; }
     };
     
     Outer() : m_inner(Inner()) { std::cout << "Outer()" << std::endl; }
     ~Outer() { std::cout << "~Outer()" << std::endl; }
     
    private:
     Inner m_inner;
    };
    
    int main()
    {
     Outer out;
    }
    Ausgabe:
    Code:
    Inner()
    Outer()
    ~Outer()
    ~Inner()

    3)Wie könnte das nichtvorhandensein von Friends unschön umgangen werden?
    Variablen als public deklarieren. Man kann dann von außen drauf zugreifen, allerdings untergräbt das eine Säule der OOP (Stichwort Datenkapselung)

    4)Wie wird bei mehrfach Vorhandenen und überladenen Konstruktoren einer
    Klasse die Eindeutigkeit beim anlegen des Objektes hergestellt? Nach welcher Regel wird welcher Konstruktor aufgerufen?

    Es wird der Konstruktor mit der passenden Signatur aufgerufen. Beispiel:

    Code:
    #include <iostream>
    
    class Test
    {
    public:
     Test(int i) { std::cout << "Test(int): " << i << std::endl; }
     Test(const char *t) { std::cout << "Test(const char*): " << t << std::endl; }
    };
    
    int main()
    {
     Test t(5);
     
     Test s("Das ist ein Test");
    
    /* Ausgabe:
    Test(int): 5
    Test(const char*): Das ist ein Test
    */
    }
    
    5)In welchem Fall muss man den Kopierkonstruktor überladen?
    Wenn die Klasse selber Speicher verwaltet. Wenn du z.B. einen char*-Zeiger hast, der auf den Heap zeigt, dann musst du den Copyconstructor überladen, sonst gibt es nur eine sog. "flache Kopie". D.h. die Kopie des Objekts kriegt nur die Addresse des Zeigers kopiert. Das alte und neue Objekt zeigen jetzt gleichzeitig auf die gleiche Speicherstelle. Das gibt natürlich ein Problem, wenn eins der Objekte den Speicher freigibt und das andere dann darauf zugreifen will. Also muss man im Kopierkonstruktor den Speicher im neuen Objekt neu anlegen und dann den Inhalt kopieren.

    6)Wann muss man explizit einen Destruktor angeben?
    Wenn du z.B. benötigte Ressourcen (Speicher, Dateien etc.) wieder freigeben musst.

    7)Wie realisiere Sie eine is-a-Relation zwischen Objekten?
    Mithilfe von Ableitung:

    Code:
    class Tier
    {
    };
    
    class Elefant : public Tier
    {
    };
    Ein Elefant ist ein Tier.

    8) Wie realisiere Sie eine has-a-Relation zwischen Objekten?
    Mit Aggregation:

    Code:
    class Motor
    {
    };
    
    class Auto
    {
    private:
     Motor theMotor;
    
    };
    Ein Auto hat einen Motor.

    -----------
    Hoffe ich hab ausführlich genug geantwortet

    edit: Mit ein bisschen Hilfe von Google und Wikipedia hätte man das aber leicht selber herausfinden können.
     
  3. 30. Dezember 2008
    AW: Fragen zu C++

    @pyro

    Ich danke dir!!!!!!!!!!

    Ja, Gegoogelt hab ich auch, aber man findet einfach zu viele Informationen zu den Themen, da blicke ich einfach nicht mehr durch was ich davon gebrauchen kann und was nicht.
    Denke das dürfte fürs erste reichen.
    Vielen dank nochmals!
     
  4. 30. Dezember 2008
    AW: Fragen zu C++

    ~closed~

    Mfg,

    Kolazomai
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.