tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
857
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Krikus Krikus ist offline Mitglied Silber
    Registriert seit
    Jan 2009
    Beiträge
    64
    Hi,

    ich möchte gerne einen vector an eine abstracte per Konstrucktor übergeben.
    Innerhalb der Abstracten Klasse, möchte ich dann den Inhalt des Vectors ausgeben.
    Allerdings stimmt damit etwas noch nicht. In der Abstracten Klasse kann ich nichtauf den Inhalt zugreifen.

    Hier einmal der Code:

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    class klasse_test: public basis_klasse
    {   
    private:
        vector<string> V;
            
     
    public:
        
        klasse_test()//Konstrucktor 
        :basis_klasse(V)
        {
        V.push_back("Inhalt 0"); //0
        V.push_back("Inhalt 1");//1
        V.push_back("Inhalt 2");//2
     
        };
     
        void xxx()
        {
        
        }
    };

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    class basis_klasse
    {
    private:
        vector<string> V;
            
    public:
        basis_klasse(vector <string> &A) :V(A){}; 
     
        virtual void xxx(void)=0;
     
        void menue(void)
        {
            system("cls");
            cout <<V[0]<<endl<<endl;
     
        }
     
    };

    Der Aufruf in der Main erfolgt so:

    Code cpp:
    1
    2
    3
    4
    
    klasse_test xxx;
    basis_klasse *test2;
    test2= &xxx;
    test2->menue( );
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Das Problem ist, dass natürlich zuerst der Konstruktor der Basisklasse aufgerufen wird bevor der Konstruktor der abgeleiteten Klasse ausgeführt wird. Da du einen leeren Vektor an die Basisklasse übergibst und in der Basisklasse eine Kopie des (leeren) Vektors gespeichert wird, bleibt der Vektor beim Aufruf der menue() Methode natürlich auch leer.

    Du hast 2 Möglichkeiten: entweder du speicherst dir eine Referenz auf den übergebenen Vektor in der Basisklasse, oder du deklarierst den Vektor in der Basisklasse als protected und füllst diesen direkt in der abgeleiteten Klasse anstatt nochmal einen Vektor in dieser Klasse zu definieren.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    Avatar von Online-Skater
    Online-Skater Online-Skater ist offline Mitglied Brillant
    Registriert seit
    Sep 2004
    Ort
    Rostock
    Beiträge
    891
    Hi, ich denke es wird nichts ausgegeben, weil du einen leeren Container übergibst. Wenn du da was sehen willst muss deine abgeleitete Klasse ebenfalls einen Konstruktor mit einem Vektor als Parameter bereitstellen. So wie es jetzt ist, wird ein leerer Vektor von der test_klasse an die Basisklasse übergeben.

    mfg
     

  4. #4
    Krikus Krikus ist offline Mitglied Silber
    Registriert seit
    Jan 2009
    Beiträge
    64
    Stimmt da hab ich garnicht dran gedacht, dass zuerst der Konstrucktor der Basisklasse aufgerufen wird.

    @deepthroat
    Ich hab deinen 2 Vorschlag mit protected einmal umgesetzt.
    Sind ja nur 2 Zeilen zuändern.
     

Ähnliche Themen

  1. Abstracte Klasse + Konstructor ...?
    Von takidoso im Forum Java
    Antworten: 3
    Letzter Beitrag: 08.06.09, 13:53
  2. Klasse nur mit Konstruktor
    Von mojitoweb im Forum Java
    Antworten: 19
    Letzter Beitrag: 17.05.08, 11:02
  3. Klasse Vector in Template übergeben ?
    Von MFC openGL im Forum C/C++
    Antworten: 10
    Letzter Beitrag: 18.05.05, 17:56
  4. Klasse / Konstruktor (VB.net)
    Von Speedkill im Forum Visual Basic 6.0
    Antworten: 6
    Letzter Beitrag: 26.04.05, 10:38
  5. StringBuffer an konstruktor übergeben
    Von AndreG im Forum Java
    Antworten: 3
    Letzter Beitrag: 01.03.04, 18:27