instanz einer klasse



  • zur verdeutlichung meiner frage habe ich ein kleines beispiel erstellt.
    und zwar geht es darum wann ich eine Instanz einer klasse mit

    B	m_klasseB;
    

    und wann mit

    B*     m_klasseB
    

    erstelle.

    und wie ich später richtig darauf zugreife:

    m_klasseB.MethodeB1();
    

    oder

    m_klasseB->MethodeB1();
    

    bzw. worin der unterschied liegt

    class A
    {

    public:
    MethodeA1();
    MethodeA2();

    B m_klasseB;
    //B* m_klasseB
    }

    class B
    {

    public:
    MethodeB1();
    MethodeB2();

    }

    A::MethodeA1()
    {
    m_klasseB.MethodeB1();
    m_klasseB->MethodeB1();
    }[/code]



  • B* m_klasseB;

    da musst du noch new aufrufen!!!!!! sonst kracht es, aber gewaltig.



  • bbbbb schrieb:

    B* m_klasseB;

    da musst du noch new aufrufen!!!!!! sonst kracht es, aber gewaltig.

    Nicht zwangsläufig.

    Man muss sich nur bewusst sein, dass das nur ein Zeiger ist, keine Instanz. Solange man diesen Zeiger nicht auf eine Instanz von B zeigen lässt (z.B. indem man ihm den Rückgabewert von new zuweist), kann man ihn nicht benutzen.



  • gut.
    ich verwende nun folgendes

    B    m_klasseB
    

    dann kann ich mir wohl auch das new sparen.

    und könnt ihr mir noch etwas zum unterschied von

    m_klasseB->MethodeB1();
    

    und

    m_klasseB.MethodeB1();
    

    sagen?

    ihr könnt mir auch gerne recht ausführlich anworten, da ich auch versuche zu verstehen, was dabei passiert oder unterschiedlich ist.



  • Der Aufruf mit dem Pfeil funktioniert nur, wenn links ein Zeiger steht (oder wenn es eine Überladung des Pfeiloperators für diese Klasse gibt). Der Aufruf mit dem Punkt braucht ein Objekt (oder eine Referenz) auf der linken Seite und ist nicht überladbar.

    Wenn man überladene Operatoren außer Betracht lässt, ist

    a->b

    gleichbedeutend mit

    (*a).b


Anmelden zum Antworten