Рассмотрим следующие классы:
class Coord
{
public:
double _x, _y;
Coord(double x, double y)
{
_x = x;
_y = y;
}
};
class NamedPoint : public Coord
{
public:
int _id;
NamedPoint(int id, double x, double y) :
Coord(x,y),
_id(id)
{
}
};
Я хотел бы создать функцию-член NamedPoint - corre () - которая возвращает ссылку типа Coord, соответствующую NamedPoint.
Например, я хотел бы что-то вроде:
const Coord& NamedPoint::coord()
{
return ((Coord)*this);
}
Но я получаю предупреждение о временных переменных, и я не без ума от этого.
Конечно,следующие работы:
Coord coord()
{
Coord c = *this;
return c;
}
Но я бы предпочел вернуть ссылку.
Кто-нибудь знает, возможно ли это с помощью унаследованных классов?функции.Я по-разному перегружаю оператор == для Coord и NamedPoint.Coord просто проверит {x, y}, а NamedPoint проверит {id, x, y}.Если я забуду привести NamedPoint к Coord до этого теста ==, я буду использовать неправильную версию.
Итак, хотя я понимаю, что
(Coord)np1 == (Coord)np2
даст мне то, что я хочу, я бы предпочел использовать что-то вроде
np1.coord() == np2.coord()
, которое я считаю более понятнымотносительно того, что происходит.