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++:有沒有辦法指定一個從另一個繼承的泛化類?
的參數更改爲基準爲const VEC:
virtual void Add(Vec const &vector) = 0;
類(公開)從Vec
衍生可通過參考基類被傳遞。
此外,由於您顯然計劃使用Vec
作爲基類,因此您可能也希望使其dtor虛擬化。否則,如果您嘗試通過指針或對基引用銷燬派生類型的對象,則會出現未定義的行爲。
使用常量引用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 2012-03-30 21:02:11
@NBcode:你需要指定'dim'的大小,例如:'double dim [10];'如果你不知道大小的前面(或者甚至可能是如果你這樣做),你幾乎肯定要使用'std :: vector dim;'代替。 –
2012-03-30 21:03:39
我做了一個Vec3類,它是從Vec繼承而來的。是否可以強制重寫Add()方法中的參數爲「Vec3」? – NBcode 2012-03-30 21:40:50