WIE? Aus Memberfunktion auf Variable des Konstruktor zugreifen?



  • Hallo,

    ich brauche mal Eure Hilfe.

    class TEST
    {
      public:
      	TEST();
    	void print();
    
    };
    
    TEST::TEST()
    {
      int my_int=1000;
    
    };
    
    void 
    TEST::print()
    {
      cout<<???????.my_int<<endl;   
    };
    
    int main(int argc, char* argv[])
    {
     TEST *t= new TEST();
     t->print();
    
    return 0;
    };
    

    Wie kann ich auf die im Konstruktor definierte Variable my_int, in der Memberfunktion print(); zugreifen um diese auszugeben?

    Gruss Matze



  • Du kannst der Klasse nicht nur Memberfunktionen spendieren, sondern auch Elemente:

    class TEST
    {
    public:
      TEST()
      {my_int = 4711;} //schreibt in die Membervariable
    
      void print()
      {cout<<my_int;}  //liest Membervariable
    
    private:
      int my_int;
    };
    


  • Hey! Warum deklarierst du my_int in der Funktion und nich in der Klasse?

    class TEST
    {
      public:
          TEST();
        void print();
    
      private:
          int my_int;
    
    };
    
    TEST::TEST()
    {
      my_int=1000;
    };
    
    void TEST::print()
    {
      cout<< my_int << endl;  
    };
    
    int main(int argc, char* argv[])
    {
     TEST *t= new TEST();
     t->print();
    
    return 0;
    }
    

    Ist doch einfacher oder? 🕶

    Edit: arghs, zu langsam



  • danke für den Tip aber wie sieht denn die sache aus, wenn ich in der klasse eine
    liste verwalten will?

    also

    list<int> my_list

    da mekert der compiler, wenn ich die liste direkt in die klasse schreibe,
    also habe ich diese in den konstruktor, also stellvertretend for mein int, geschrieben! Möchte ich nun aber über ne print funktion die liste ausgeben,
    wie kann ich denn den erzeugten listen-iterator ansprechen?

    gruss matze



  • Schau mal hier bei dem Beispiel wie das geht, bin jetzt zu faul alles aufzuschreiben^^ ist ansich selbsterklärend :

    #include "stdafx.h"
    #include <iostream>
    #include <list>
    
    using namespace std;
    
    class CRaumschiff
    {
    public:
    
    	CRaumschiff (int ID) //Konstruktor mit Wertübergabe
    	{
    		m_ID = ID;
    
    		cout << "Raumschiff wurde erstellt" << endl;
    	}
    
    	~CRaumschiff () //Destruktor
    	{
    		cout << "Raumschiff wurde zerstoert\n";
    	}
    
    	void starten () //Funktion starten
    	{
    		cout << "Raumschiff " << m_ID << " gestartet." << endl;
    	}
    
    //Variablendeklaration
    private:
    	int m_ID;
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	// Variablen
    	list<CRaumschiff*> lSchiffe;
    	list<CRaumschiff*>::iterator i;
    	int Anzahl = 0;
    
    	CRaumschiff *Temp = NULL;
    
    	// Abfrage wie viele Raumschiffe gebaut werden sollen
    	cout << " Anzahl: "; 
    	cin >> Anzahl;
    
    	// Erstellen der Raumschiffe
    	for (int j=0; j<Anzahl; j++)
    	{
    		Temp = new CRaumschiff (j+1);
    		lSchiffe.push_back (Temp);
    	}
    
    	// Raumschiffe starten lassen
    
    	for (i= lSchiffe.begin();i!=lSchiffe.end(); i++)
    	{
    		(*i)->starten();
    	}
    
    	// Raumschiffe zerstören
    	for (i=lSchiffe.begin(); i!=lSchiffe.end(); ++i)
    	{
    		delete (*i);
    		(*i) = NULL;
    	}
    
    	//Liste löschen
    	lSchiffe.clear();
    
    	system("PAUSE");
    	return 0;
    }
    


  • Du kannst eine std::list genauso als Membervariable verwenden wie ein int. Und wenn das bei dir nicht funktioniert, hast du halt was falsch gemacht.



  • matz-eed7 schrieb:

    danke für den Tip aber wie sieht denn die sache aus, wenn ich in der klasse eine
    liste verwalten will?

    also

    list<int> my_list

    da mekert der compiler, wenn ich die liste direkt in die klasse schreibe,

    Was genau sagt er denn? (ich tippe mal darauf, daß du ein std:: davorsetzen mußt, damit er es erkennt.

    also habe ich diese in den konstruktor, also stellvertretend for mein int, geschrieben! Möchte ich nun aber über ne print funktion die liste ausgeben,

    Sehr schlechte Idee - lokale Variablen im Konstruktor werden sofort wieder zerstört, wenn der Ctor zu Ende ist. Das heißt, in dem Moment, wo du print() aufrufst, existiert die Liste schon gar nicht mehr.
    Die einzige Möglichkeit, das zu umgehen, ist wie gesagt, daß du deine Objekte als Klassenvariablen anlegst (dann erzeugt der Ctor dass Objekt und es wird erst gelöscht, wenn das "Vater"-Objekt zerstört wird (am Ende der main())).



  • der tipp mit dem std:: vor der list war scheinbar richtig, zumindest mekert der compiler net mehr!!!!
    alles andere muss ich nun erst mal testen!!!

    danke noch mal!!!!!


Anmelden zum Antworten