Programació d'aprenentatge: quina diferència hi ha entre l'operador de punts (.) I -> en C ++? [duplicar]?


Resposta 1:

L'operador de punts proporciona accés a un membre d'objecte on l'operador esquerre és un nom d'objecte o una referència a un objecte. L’operador de fletxa proporciona accés al membre d’un objecte assenyalat per l’operador esquerre (que és un punter simple).

A més, l'operador de fletxes es pot sobrecarregar; de manera que si l'operador esquerre no és un punter simple sinó un objecte, l'operador pot tenir un significat diferent. Tot i així, el resultat ha de ser un punter simple o referència a un objecte existent (que també té definit l'operador d'accés). Sintàcticament, l'operador dret ha de ser un membre (un identificador d'un membre existent) d'aquest objecte.

Un bon exemple de sobrecàrrega significativa de l'operador de fletxes són els indicadors intel·ligents. Es tracta de classes que s'envolten al llarg d'un punter simple, afegint més funcionalitat (propietat única de l'objecte dinàmic o recompte de referències). Els punters intel·ligents estan sobrecarregats per l'operador de fletxa, de manera que podeu utilitzar-lo per accedir a l'objecte subjacent, tal com ho faríeu en cas d'un punter normal a aquest objecte.


Resposta 2:

Et diré amb paraules senzilles ...

Per accedir als membres d'una estructura, utilitzeu l'operador de punts i

Per accedir als membres d'una estructura mitjançant un punter, utilitzeu l'operador de fletxes.

Per exemple, considereu la següent estructura .......

struct student {
  int regNo;
  nom char [25];
} std;

Per assignar el valor "suhail" al nom membre de l'objecte std, escriureu una cosa així: ..

strcpy (nom std. "suhail");

Si ptr_std és un punter a un objecte d'estudiant de tipus, llavors assigna el valor "suhail" al nom membre de l'objecte std, heu d'escriure així ...

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

Resposta 3:

L’operador de punter és el que es coneix com a sucre sintàctic: cosa realment no necessària, però facilita la lectura i el programa. La declaració

p-> camp

és idèntic a

(* p) .field

si p és un punter. Si es tracta d'un objecte, el compilador invocarà el mètode operador -> () a l'objecte.