ist das C++ oder was anderes? int var = Objekt->funktion()->obkektVatiable;

Gast #4551657
Lesenswert?
• ▲
▼
Hallo Leute,
ich hab letztens eine Code gesehen bei dem ich mir nicht sicher war ob 
es C++ ist bzw. welche Version.
Mir wurde versichert, dass es C++ ist. Aber weiteres konnte man mir 
nicht erklären.
Bis jetzt ist mir sowas auch in keinem C++ Beispiel untergekommen.
1
int var = Objekt->funktion()->obkektVatiable;
Ist das wirklich C++, welche Version und wo findet man ein Beispiel zu 
sowas?
#4551665
Lesenswert?
• ▲
▼
Der Operator -> kann mehrfach in einem Ausdruck angewendet werden, und 
Funktionen können pointer zurückgeben. Näheres findet sich unter den 
Stichworte "Operatoren", "Pointer" und "Funktionen" in jedem 
Grundlagenbuch zur Sprache.

Und das wird so in sehr vielen Programmen sehr häufig verwendet.

Und ja, das letzte Element in der Kette muß in dem Beispiel ein int 
(oder ein implizit in einen int castbarer Typ) sein.

Oliver
Gast #4551686
Lesenswert?
• ▲
▼
Ok ich kenne sowas.
1
int var = Objekt->funktion(); // was es machen kann ist klar
2
aber 
3
int var = Objekt->funktion()->ObVar; //hinter der Funktion noch ein Pionter auf eine Variable ist mir persönlich nicht bekannt.
Was passiert da ...funktion()->ObVar;? Wird an die Funktion eine 
Variable übergeben eine Adresse der Variable oder soll die Funktion 
diese Variable zurückgeben?
Gast #4551696
Lesenswert?
• ▲
▼
int var = Objekt->funktion()->ObVar;

könnte kurz für sowas sein:

myStruct_t* returnPointerDerFunktion = Objekt->funktion();

int var = returnPointerDerFunktion->ObVar;

wobei

myStruct_t* Objekt::funktion()
{
myStruct_t* resultStruct;
return resultStruct;
}

sein könnte.
Moderator Persönliche Seite #4552220
Lesenswert?
• ▲
▼
Oliver S. schrieb:
> Thorsten schrieb:
>> Das könnte sogar reines C sein, wenn "Objekt" ein "struct" ist.
>
> Könnte es sein, wenn da nicht function() wäre.

Ja, und?

Auch, wenn man die Dinger dort im Allgemeinen nicht „Methode“ nennt,
Funktionszeiger gab es bereits im „Ur-C“, siehe Nachlass von Dennis
Ritchie (Beschreibung der Sprache C aus dem Jahr 1975).
#4552266
Lesenswert?
• ▲
▼
ANSI-C:
1
struct myObject1_STRUCT {
2
  int objectVariable;
3
}
4
typedef struct myObject1_STRUCT myObject1;
5

6
myObject1* obj1;
7

8
struct myObject2_STRUCT {
9
  myObject1* (*myFunction)();
10
}
11
typedef struct myObject2_STRUCT myObject2;
12

13
myObject1* myObject2_myFunction() {
14
  return obj1;
15
}
16

17
int main() {
18
  obj1 = (myObject1*) malloc( sizeof(myObject1) );
19

20
  myObject2* obj2 = (myObject2*) malloc( sizeof(myObject2) );
21
  obj2->myFunction = myObject2_myFunction;
22

23
  /* ... */
24

25
  int var = obj2->myFunction()->objectVariable;
26
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren