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

Ukazatel this – C / C++ – Fórum – Programujte.comUkazatel this – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
LPG19950
Newbie
19. 3. 2011   #1
-
0
-

Dobrý den, prosim Vás chtěl bych poprosit o radu. Zatím C++ docela zvládám a i ukazatele jsem docela pobral, ale mám problém s ukazatelem this. Vůbec nevím jak vlastně funguje..samoty jeho princip. Vim třeba že funguje:



class trida
{
private:int hodnota;
public: const trida operator++ (int a);
};
const trida trida::operator++ (int a)
{
trida pomoc(*this);
++hodnota;
return pomoc;
}

ale nemožu přijit na to jak tento ukazatel funguje. Nechapal jsem to už i u jiných věcí. Jinak ukazatele v pohodě..ale tento ale vubec nechapu :( Mohl by mi to prosim někdo po lopatě vysvětlit? Nebo mohl by mi to prosim nekdo tento ukazatel prepsat do delsiho a lepe pochopitelnejsiho kodu? Protoze me uplne uniká jeho význam/princip/funkce/atd...proste vubec nvm jak funguje a jsem z toho docela smutny:( Seděl jsem nad tím asi 2 hodiny, hledal jsem na internetu ale prostě nedovedu to stále pochopit. Prosim kdyby mi to nekdo vysvetlil byl bych mu velmi zavázán.

Nahlásit jako SPAM
IP: 88.102.44.–
Reklama
Reklama
nervak0
Věrný člen
20. 3. 2011   #2
-
0
-

Je to ukazatel na instanci, pro kterou byla metoda zavolána. V podstatě je to skrytý automaticky předávaný parametr. Takže když máš toto

void trida::metoda(int parametr);


trida prom1, prom2;

prom1.metoda(1);
prom2.metoda(2);
Tak je to ve výsledku vlastně toto
void trida::metoda(trida *this, int parametr);


trida prom1, prom2;

trida::metoda(&prom1, 1);
trida::metoda(&prom2, 2);

Nahlásit jako SPAM
IP: 213.211.51.–
LPG19950
Newbie
20. 3. 2011   #3
-
0
-

Pořad to nechapu....nvm proč :( :(
Nechce mi to někdo říct fakt po lopatě? Od zakladu radši?

Nahlásit jako SPAM
IP: 88.102.44.–
Grungy0
Super člen
20. 3. 2011   #4
-
0
-

Čo presne nechápeš? Veď je to dosť po lopate.

Ide o to že môžeš vytvoriť ľubovolný počet inštancií určitého objektu. Napríklad si môžeš vytvoriť celý vozový park inštancii triedy auto. Aby kompilátor presne vedel na ktorú inštanciu chceš zavolať nejakú metódu(funkciu), tak si pridáva ten smerník this ako prvý parameter toho volania. Inak by mu nebolo jasné či má pohnúť napríklad červeným alebo zeleným autom.

Nahlásit jako SPAM
IP: 188.123.100.–
Prvý náznak hlúposti, je pocit geniality.
yaqwsx+9
Posthunter
20. 3. 2011   #5
-
0
-

Já bych se odvázal od implementace; a snažil se ukazatel this pochopit více abstraktněji (tzn. jak ho použít a co představuje, nikoliv jak jej technicky realizuje přkladač).
Ukazatel this můžeš použít v metodě nějaké třídy. Tento ukazatel ukazuje na objekt třídy, pro který je volána daná metoda. Tzn. když voláš nějakou funkci OBJEKTU (nikoliv třídy):

neajkaTrida objekt;

objekt.nejakaMetoda();

tak voláš nejakaMetoda pro konkrétní jeden jediný objekt. Ale abys věděl, který se kterým objektem pracuješ uvnitř metody, tak ti jazyk poskytne ukazatel this, který ukazuje v tomto konkrétním příkladě na (chceš-li tak proměnnou) objekt.

Možná mě ještě napadá; jsi si jistý že chápeš význam slov třída a objekt třídy? V tom možná bude háček. Třída je "šablona", podle které překladač na tvé přání vytváří objekty (složitější proměnné). S třídou nejsi schopen nějak pracovat - třída v podstatě "fyzicky neexistuje", je to jen "recept" pro vytvoření objektu ("jídla, které můžeš sníst"). Objektu, který poté v paměti někde "fyzicky existuje" a obsahuje nějaká data. A podle "šablony" ("receptu") můžeš vytvořit libovolné množství objektů ("jídel").
Ukazatel this ti potom ukazuje "na jídlo" se kterým právě pracuješ "podle receptu".


Tý jo; to je ale metafora :D

Nahlásit jako SPAM
IP: 85.160.107.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
nervak0
Věrný člen
20. 3. 2011   #6
-
0
-

Na dotaz, jak funguje this, nebudu odpovídat vysvětlováním základů OOP.

Nahlásit jako SPAM
IP: 213.211.51.–
yaqwsx+9
Posthunter
20. 3. 2011   #7
-
0
-

To nervak : Ale co když je v tom zakopaný pes? Nech původního tazatele se vyjádřit.... Prootže on se ptal na:

uplne uniká jeho význam/princip/funkce/atd

Nahlásit jako SPAM
IP: 85.160.107.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
sputnikone+1
Věrný člen
20. 3. 2011   #8
-
0
-

To yaqwsx : Pak by si měl tazatel nastudovat základy OOP. Tady na to není místo a literatury existují mraky...

Nahlásit jako SPAM
IP: 147.251.201.–
nervak0
Věrný člen
21. 3. 2011   #9
-
0
-

Ale co když je v tom zakopaný pes?

Asi je :)

Prootže on se ptal na:

uplne uniká jeho význam/princip/funkce/atd

Věnoval jsem víc pozornosti tomu "samotny princip" a 3x "jak funguje".

Nahlásit jako SPAM
IP: 213.211.51.–
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, 109 hostů

Podobná vlákna

Ze by ukazatel ... — založil Marecek

Ukazatel — založil porod

Ukazatel na port — založil Nykodym

Ukazatel na funkci — založil Jirka

Ukazatel ve strukture — založil Hlavinka

Moderátoři diskuze

 

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