球体とカプセルのオブジェクトを内部に持つ3Dワールドをモデル化しようとしています。私は、シェイプクラスが基本クラスであり、球クラスとカプセルクラスが基本クラス(継承した場合は完全に仮想クラス)から継承する方法でモデル化しました。基本クラスをパラメータとして派生クラスに変換できるように関数をオーバーロードします。
class Shape
{
protected:
COLORREF color;
public:
virtual COLORREF getColor() =0;
};
class Capsule: public Shape
{
private:
Point start;
Direction direction;
int dist, r;
//Color color;
//COLORREF color;
public:
Capsule(Point start, Direction direction, int inputdist, int inputr, COLORREF inputcolor);
COLORREF getColor();
};
class Sphere : public Shape
{
private:
int r;
Point p;
//Color color;
//COLORREF color;
public:
Sphere(int x, int y, int z , int r, COLORREF inputcolor) ;
COLORREF getColor();
Point getpoint();
int getradius();
};
そしてIは、球体オブジェクトへのポインタまたはカプセルオブジェクトへのポインタのいずれかを取り込む異なるクラスの機能を有します。
bool Collideswith(Sphere *s);
bool Collideswith(Capsule *c);
しかし、私は私が
Shape *myshape = new Sphere(0,0,0,4, RGB(0,0,0));
if(myRay.Collideswith(myshape)) { blah... }
呼び出すときに呼び出される上記の機能の1を強制したいと思います。しかし問題は、ときCollideswithだけ、球にカプセルまたはポインタへのポインタになりますので、ということです私は今、それがシェイプへのポインタである、私が渡しているものへのこのポインタを取らないと呼んでいます。
シェイプポインタを渡しているという事実を変更することはできませんが、Collideswith()関数でシェイプポインタを取得する方法を理解する必要があります。 (多分、形状ポインタを取り、形状がカプセルか球かどうか分かるオーバーロードされた関数を作成することによって)
何か提案は本当に感謝しています。 おかげ
Collideswith()メソッドを持つ他のクラスのコードを変更できますか?または、Shape関連のクラスのみを変更できるとしますか? – yaobin