class Vec
{
double dim[];
public:
Vec(void);
~Vec(void);
virtual void Add(Vec vector) = 0;
};
Vec::Add()
のVec
を「Vec
から継承するすべてのクラス」に置き換えます。 これを行う方法はありますか?C++:別のクラスを継承する一般化されたクラスを指定する方法はありますか?
class Vec
{
double dim[];
public:
Vec(void);
~Vec(void);
virtual void Add(Vec vector) = 0;
};
Vec::Add()
のVec
を「Vec
から継承するすべてのクラス」に置き換えます。 これを行う方法はありますか?C++:別のクラスを継承する一般化されたクラスを指定する方法はありますか?
VecとをCONSTする基準のパラメータ変更:
virtual void Add(Vec const &vector) = 0;
クラス(公に)はVec
由来の基底クラスを参照して渡すことができます。
また、Vec
を基本クラスとして使用する予定があるため、おそらくdtorも仮想にしたいと考えています。それ以外の場合、派生した型のオブジェクトを、ポインタやベースへの参照を介して破棄しようとすると、未定義の動作が発生します。
利用のconst Vecを参照、またはVecを
class Vec
{
double dim[];
public:
virtual void Add(const Vec& vector) = 0;
};
へのポインタはい、あなたはポインタまたはVec
への参照渡し:
class Vec
{
double dim[];
public:
Vec(void);
~Vec(void);
virtual void Add(Vec* vector) = 0;
};
そのclass
へのポインタからの変換を暗黙のうちにVec
からVec*
に派生します。
値渡しの場合、オブジェクトのスライシングが実行され、動作は期待どおりになりません。
"エラーC2503: 'Vec':基本クラスにゼロサイズの配列を含めることはできません。なぜこれがですか? (これは私がそれから継承した後です) – NBcode
@NBcode: 'dim'のサイズを指定する必要があります:' double dim [10]; 'あなたがサイズを知っていないならばもしそうなら、 'std :: vector dim;'を使いたいと思うでしょう。 –
私はVecから継承したVec3クラスを作った。オーバーライドAdd()メソッドのパラメータを強制的に "Vec3"にすることは可能ですか? – NBcode