次のクラスを検討してください。
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に対応するCoord型の参照を返すNamedPointのメンバー関数(coord())を作成したいと思います。
たとえば、次のようにします。
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()
何が起こっているのかについてはもっと明確だと思います。