NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: volanie funkcie triedy

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
expoox
Tvůrce
Avatar
expoox:4.5.2016 16:10

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.5.2016 16:10
Avatar
David Novák
Tvůrce
Avatar
Odpovídá na expoox
David Novák:4.5.2016 16:42

???

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.5.2016 16:42
Chyba je mezi klávesnicí a židlí.
Avatar
expoox
Tvůrce
Avatar
Odpovídá na David Novák
expoox:4.5.2016 16:44

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.5.2016 16:45
 
Nahoru Odpovědět
4.5.2016 16:44
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na expoox
Martin Dráb:4.5.2016 16:48

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í
+2,50 Kč
Řešení problému
Nahoru Odpovědět
4.5.2016 16:48
2 + 2 = 5 for extremely large values of 2
Avatar
expoox
Tvůrce
Avatar
Odpovídá na Martin Dráb
expoox:4.5.2016 16:59

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

 
Nahoru Odpovědět
4.5.2016 16:59
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na expoox
Martin Dráb:4.5.2016 17:01

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.5.2016 17:01
2 + 2 = 5 for extremely large values of 2
Avatar
David Novák
Tvůrce
Avatar
Odpovídá na Martin Dráb
David Novák:4.5.2016 18:50

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.5.2016 18:50
Chyba je mezi klávesnicí a židlí.
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na David Novák
Petr Nymsa:4.5.2016 18:56

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
4.5.2016 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.