Programmeerimise õppimine: Mis vahe on punkti (.) Operaatori ja -> vahel C ++? [duplikaat]?


Vastus 1:

Punkti operaator võimaldab juurdepääsu objekti liikmele, kus vasakpoolne operand on objekti nimi või viide objektile. Nooloperaator võimaldab juurdepääsu objektile, millele osutab vasakpoolne operand (mis on tavaline osuti).

Lisaks võib nooleoperaator olla ülekoormatud; nii et kui vasakpoolne operand pole tavaline osuti, vaid objekt, võib operaatoril olla erinev tähendus. Sellegipoolest peab tulemus olema tavaline osuti või viide olemasolevale objektile (millel on ka juurdepääsuoperaator määratletud). Süntaktiliselt peab õige operand olema selle objekti liige (olemasoleva liikme tunnus).

Heaks näiteks nooleoperaatori tähenduslikust ülekoormusest on nutikad osutid. Need on klassid, mis ümbritsevad tavalise osuti, lisades veelgi funktsionaalsust (dünaamilise objekti ainulaadne omamine või võrdlusloendus). Nutikatel osutitel on nooleoperaator ülekoormatud, nii et võite seda kasutada aluskihi objektile juurde pääsemiseks, nagu teeksite selle objekti jaoks tavalise osuti.


Vastus 2:

Ma ütlen teile lihtsate sõnadega ...

Struktuuri liikmetele juurdepääsu saamiseks kasutage punktioperaatorit ja

Konstruktsiooni liikmetele kursori kaudu juurde pääsemiseks kasutage nooleoperaatorit.

Mõelge näiteks järgmisele struktuurile ...

struktuuriõpilane {
  int regNo;
  char nimi [25];
} std;

Objekti std nime liikmele väärtuse "suhail" omistamiseks kirjutaksite midagi järgmiselt ...

strcpy (std.nimi, "suhail");

Kui ptr_std on osutus tüüpi õpilase objektile, määrates objekti std nime liikmele väärtuse "suhail", peate kirjutama niimoodi ...

strcpy (ptr_std-> nimi, "suhail");

Vastus 3:

Kursori operaator on nn süntaktiline suhkur: midagi, mis pole tegelikult vajalik, kuid muudab programmi kirjutamise ja lugemise lihtsamaks. Avaldus

p-> väli

on identne

(* p) .väli

kui p on tegelikult osuti. Kui see on objekt, kutsub kompilaator selle asemel objekti operaatori -> () meetodi.