Reference vs. ukazatele – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Reference vs. ukazatele – C / C++ – Fórum – Programujte.comReference vs. ukazatele – C / C++ – Fórum – Programujte.com

 

Gravatar
~ Anonymní uživatel
1 příspěvek
13. 11. 2013   #1
-
0
-

Dobrý podvečer,

často se setkávám s tím, že potřebuji předat do nějaké třídy "odkaz" na třídu další. Například do seznamu všech postaviček na mapě přidat jednotlivé postavičky.

Ze seznamu bych chtěl umět jednotlivé postavičky upravovat a to tak, aby se změna projevila u dané postavičky i mimo seznam. Naopak změnění postavičky musí reflektovat postavička v seznamu.

Chápu že mám v zásadě asi dvě možnosti. Předání pomocí reference nebo ukazatele. Bohužel v těchto pojmech trochu plavu... Nevím kdy použít kterou. Obecně se snažím předávat vše pomocí hodnoty ( základní typy jako int) nebo referencí (třídy). Ukazatele vesměs nepoužívám, protože to znamená další práci se správou paměti navíc.

V seznamu postaviček mám vektor, list atd. Občas je potřeba data zase ze seznamu vytáhnout. Vytahovat referenci není asi nejchytřejší nápad (při změně vektoru, listu budou neplatné), takže se většinou uchyluji k použití ukazatele. Podobný postup se mi ale vůbec nezdá. Člověk používá tečkovou notaci:

Seznam.metoda()

a najednou musí používat šipku:

Seznam.dejPostavicku()->zmenJmeno("Pepa")

Konečně tedy položím otázku. Je můj postup (vracení referencí, pokud to jde, jinak pomocí ukazatele) ten správný způsob? Není nějaký lepší? V jakých případech se vyplatí více použít reference a kdy ukazatel?  Děkuji za odpovědi.

Nahlásit jako SPAM
IP: 89.190.72.–
vitamin+8
Grafoman
13. 11. 2013   #2
-
0
-

#1 Gravatar
Referencia je v podstate ukazatel zo syntaktickou omackou a bez pointorvei aritmetiky. Referencie sa pridali do c++ hlavne kvoly overloadingu operatorov a copy constructorom.

Priklad:

void fnc(TvojaTrida x);	//parameter x reprezenuje kopiu hodnoty ktorou si funkciu volal

void fnc(TvojaTrieda* x);	//parameter reprezentuje adresu triedy, nevznika kopia

void fnc(TvojaTrieda& x);	//parameter reprezentuje adresu triedy ako predchadzajuci priklad rozdiel je len v manipulaci s premennou x

//ako bonus tu mas 4 priklad:
void fnc(TvojaTrieda&& x);	//rvalue referencia :)
Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 112 hostů

Podobná vlákna

Ukazatele — založil Šimon

Ukazatele — založil Albornoz

Ukazatele — založil IBTR

Ukazatele — založil demo

Ukazatele v C? — založil Zakruta

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý