Diskuze: volanie funkcie triedy

C++ C a C++ volanie funkcie triedy

Avatar
expoox
Redaktor
Avatar
expoox:

Ahoj, povedzme ze mam triedu

class A {
        public:
                void func ( void );
        ...
};

ako mam docielit toho aby sa tato funkcia dala volat takto ? :

A a;
a.func().func().func() ..... ;
 
Odpovědět 4. května 16:10
Avatar
David Novák
Tým ITnetwork
Avatar
Odpovídá na expoox
David Novák:

???

Z definice třídy vyplývá, že můžeš volat funkci takto:

A a;
a.func();

Netuším, proč bys chtěl func().func().... ale je to samozřejmě možné - stačí, když ti funkce func() vyrobí nový objekt obsahující funkci se jménem func() a vrátí to returnem.

Nahoru Odpovědět 4. května 16:42
Chyba je mezi klávesnicí a židlí.
Avatar
expoox
Redaktor
Avatar
Odpovídá na David Novák
expoox:

ja som si to nevymyslel, dostal som take zadanie, no ale spravil som to tak pred tym a nefungovalo to... sice, som vracial *this a nie objekt, vyskusam, vdaka

Editováno 4. května 16:45
 
Nahoru Odpovědět 4. května 16:44
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na expoox
Martin Dráb:

Toto tedy nefunguje?

class A {
public:
  A & func(void) { ...  return *this; }
}

Ono tohle řetězení volání má svůj význam. Například u návrhového vzoru Builder (popř. při postupné inicializaci objektu) zjednodušuje zápis.

userbuilder.setName("Jan").setSurName("Novák").setAddress(...);
{/code}
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 4. května 16:48
2 + 2 = 5 for extremely large values of 2
Avatar
expoox
Redaktor
Avatar
Odpovídá na Martin Dráb
expoox:

ach, uz to ide, moja blbost bola problem, pardon

 
Nahoru Odpovědět 4. května 16:59
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na expoox
Martin Dráb:

Jen ještě doporučuji si na vracení referencí z funkcí moc nezvykat. V obecném případě to může být hodně nebezpečné (reference ti nezaručuje, že daný objekt ještě existuje). V tomhle případě je to ale v pořádku.

Nahoru Odpovědět 4. května 17:01
2 + 2 = 5 for extremely large values of 2
Avatar
David Novák
Tým ITnetwork
Avatar
Odpovídá na Martin Dráb
David Novák:

Můžu se zeptat, k čemu totok vůbec je? :D

Přijde mi to naprosto šílený a matoucí způsob.. Má to nějaké geniální využití?

Nahoru Odpovědět 4. května 18:50
Chyba je mezi klávesnicí a židlí.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na David Novák
Petr Nymsa:

Ano má,
třeba nějaký container, kde přidáváš prvky pomocí Add(), různé buildery jak už výše se psalo a mnoho dalšího. Naopak mi přijde, že to je i docela časté.

Nahoru Odpovědět  +1 4. května 18:56
Pokrok nezastavíš, neusni a jdi s ním vpřed
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.