» »

[C++] Vprašanje iz osnov (dedovanje, itd.)

[C++] Vprašanje iz osnov (dedovanje, itd.)

jerneju ::

Sub mySub;
Super& ref = mySub;

Kaj pravzaprav to pomeni? Sub je class, ki je dedovan iz classsa Super.

rasta ::

Deklariraš referenco tipa Super na spremenljivko mySub.

S tem prevajalniku poveš, da je ref samo drugo ime za isti kos pomnilnika kot mySub, vendar pa naj ta kos pomnilnika obravnava kot drug tip. To pomeni, da zna uporabljati samo polja prvotnega razreda (če si strukturo predstavljaš, kot v vrsti po pomnilniških celicah naložene podatke, to pomeni, da naredi rez, kjer se naj struktura konča, prej).

jerneju ::

Hvala!

jerneju ::

Super* ptr = &mySub;

Kaj pa to pomeni?

kihc ::

Naredil si kazalec ptr tipa Super, ki kaže na naslov v pomnilniku, kjer je mySub (se pravi kaže na mySub).
x

jerneju ::

Ne razumem.

V čem je pravzaprav razlika med:

Super& ref = mySub; in Super* ptr = &mySub;

Prej pa še definiraš Sub mySub; , kjer je Sub class, ki je dedovan iz classsa Super.

Velja pa potem:

ref.Neki();
ptr->Neki();

Nekako ne zastopim razlike...

rasta ::

Kazalec je spremenljivka, ki zaseda prostor v pomnilniku - tja je skopiran naslov začetka strukture, na katero kazalec kaže.

Referenca pa je samo drugo ime za tisti kos pomnilnika.

Kam kazalec kaže lahko med tekom programa spremeniš (tako da skopiraš novo vrednost v pomnilnik, ki je dodeljen tej spremenljivki), referenci pa ne.

fiction ::

Wikipedia vse razjasni.
Lahko bi cisto lepo shajal samo s kazalci (kot je to v C-ju). Ampak ker je tako programiranje lazje podvrzeno
napakam, namesto pointerja na nek objekt, ki ga potem derefenciras, lahko uporabljas kar reference.

S tem se delas da je ref sinonim za tisti objekt. Kako to potem compiler naprej pohandla zate ni vazno
(ni nujno da je ref dejansko isti kos pomnilnika - lahko je tudi samo neke vrste "kazalec" v pomnilniku, ki se vedno avtomatsko
derefencira ob uporabi).

Recimo klic po referenci je malo bolj logicen, kot pa ce moras vedno po vrednosti prenesti naslov necesa (&nekaj) in potem znotraj funkcije
paziti da uporabljas *nekaj.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C] struct in int[] (strani: 1 2 )

Oddelek: Programiranje
657188 (6261) MrBrdo
»

C# je mozna referenca do int izven funkcije (direkt v classu torej)

Oddelek: Programiranje
81591 (1405) TopCat
»

[C/C++] pointerji in reference

Oddelek: Programiranje
111996 (1820) Matako
»

Pomoč pri c++ razlaga

Oddelek: Programiranje
192261 (2003) Person
»

c++: shranjevanja strukture(razreda) na disk v enem kosu

Oddelek: Programiranje
61095 (1004) rasta

Več podobnih tem