Credo che avere gli stessi nomi dei membri sia una cattiva idea in questo caso, perché rende il codice più soggetto a errori.
Immagina lo scenario: hai un paio di punti cartesiani: pntA e pntB. Quindi decidi, per qualche motivo, che dovrebbero essere meglio rappresentati in coordinate polari e cambiare la dichiarazione e il costruttore.
Ora, se tutte le tue operazioni erano solo chiamate di metodo come:
double distance = pntA.distanceFrom(pntB);
allora stai bene. Ma cosa succede se si utilizzano esplicitamente i membri? Confrontare
double leftMargin = abs(pntA.x - pntB.x);
double leftMargin = abs(pntA.first - pntB.first);
Nel primo caso, il codice non verrà compilato. Vedrai immediatamente l'errore e sarai in grado di risolverlo. Ma se hai gli stessi nomi dei membri, l'errore sarà solo a livello logico, molto più difficile da rilevare.
Se si scrive in un linguaggio non orientato agli oggetti, è ancora più semplice passare una struttura errata alla funzione. Cosa ti impedisce di scrivere il seguente codice?
double distance = calculate_distance_polar(cartesianPointA, polarPointB);
Diversi tipi di dati, d'altra parte, ti permetterebbero di trovare l'errore durante la compilazione.