Я вважаю, що наявність однакових імен членів є поганою ідеєю в цьому випадку, оскільки це робить код більш схильним до помилок.
Уявіть сценарій: у вас є кілька декартових точок: pntA і pntB. Тоді ви чомусь вирішите, що вони повинні бути краще представлені в полярних координатах, і змінити декларацію та конструктор.
Тепер, якщо всі ваші операції були лише методами викликів типу:
double distance = pntA.distanceFrom(pntB);
значить, ти все добре. Але що робити, якщо ви явно користувались членами? Порівняйте
double leftMargin = abs(pntA.x - pntB.x);
double leftMargin = abs(pntA.first - pntB.first);
У першому випадку код не складеться. Ви побачите помилку одразу і зможете її виправити. Але якщо у вас однакові імена учасників, помилка буде лише на логічному рівні, набагато складніше виявити.
Якщо ви пишете не об'єктно-орієнтованою мовою, тоді навіть простіше передати неправильну структуру функції. Що заважає вам написати наступний код?
double distance = calculate_distance_polar(cartesianPointA, polarPointB);
З іншого боку, різні типи даних дозволять вам знайти помилку під час компіляції.