Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

08.09.2004, 20:08

"->" und "::" - Was machen sie?

Hi, ich seh oft in Quellcodes, dass sowas vorkommt :


irgendwas->irgendwas_anderes;

was heißt das?

Und ich seh auch manchmal diesen Doppel-Doppelpunkt ("::"). Kann mir jemand zu beiden Sachen was sagen oder ne Seite geben? Danke :)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

08.09.2004, 20:14

-> is nur eine komfortablere schreibweise für:

(*objekt).member;

:: is der zugriffsoperator. damit kannst du auf dinge aus einem anderen namensraum zugreifen.

allerdigns hätte dir ein blick in die msdn das auch verraten ;)

3

08.09.2004, 22:51

Wenn du ein Objekt hast und auf die Elemente des Objektes zugreifen willst, dann must du das entweder durch den Punkt Operator (.) oder durch -> machen. Welches von Beiden du verwenden musst hängt von deiner Variable ab. Hast du einen Zeiger, dann verwendest du ->, hast du keinen Zeiger, dann .

Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
class Test
{
     public:
           int x;
};

Test *pObj = new Test(); // legt ein Zeiger auf ein Test Objekt an

Test Obj; // legt ein Test Objekt an


pObj->x = 200; // Da es sich um einen Zeiger handelt. Alternativ (*pObj).

Obj.x = 200; // Da du keinen Zeiger hast.


Der Scope Operator ::
Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
class Test
{
   public;
     void Func();
};

void Test::Func() { } // Func muss mit dem Klassen Namen qualifiziert werden.

Das Selbe gilt für Namensbereiche.
Beispielsweise std::out oder std::cin.

Ich hoffe ich konnte es dir ein wenig klarer machen ....

4

09.09.2004, 00:01

Kleine korrektur. Der Scop-Operator funktioniert bei Klassen nur in zwei fällen.

1) Die Methode oder die Member ist Statisch.
2) Man will eine Methode aus einer Basisklasse explizit aufrufen.

Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class IBase
{
public:
   virtual void Init()
   {
   }
};

class CBase : public IBase
{
public:
   void Init()
   {
       IBase::Init();
   }
};
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

5

16.09.2004, 17:41

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
class Klasse {
public:
   void foo ()
   {}
};

typedef void (Klasse::*Methodenzeiger)();

Methodenzeiger methodenzeiger = &Klasse::foo;  // hä?


Scope-Operator, der in keine deiner beiden Kategorien passt.



Ungetestet, aber es sollte auch sowas gehen:

C-/C++-Quelltext

1
2
3
Klasse instanz;

(instanz.*(&Klasse::foo))();

6

16.09.2004, 18:40

Stimmt...hast recht. Mein Fehler.

C-/C++-Quelltext

1
Methodenzeiger methodenzeiger = &Klasse::foo;  // hä?
???

wohl eher

C-/C++-Quelltext

1
Methodenzeiger methodenzeiger = Klasse::foo;  // hä?

:)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

7

18.09.2004, 10:46

Nein. Um die funktionsadresse zu beziehen kann entweder 'funktion' oder '&funktion' verwendet, wobei beides equivalent ist. Bei Methoden ist die Schreibweise ohne & jedoch nicht erlaubt, was IMHO auch deutlich konsistener ist.

Anonymous

unregistriert

8

22.09.2004, 14:05

:: bei auserhalb der Klasse definierten(richriges Wort?) Methoden:

Quellcode

1
2
3
4
5
6
7
8
9
class CKlasse
{
void MFunktion();
};

void CKlasse::MFeunktion()
{
//Die Mehtode macht nix, steht aber ausßerhalb der Klasse
}

Werbeanzeige