2012-03-30 81 views

回答

5

的參數更改爲基準爲const VEC:

virtual void Add(Vec const &vector) = 0; 

類(公開)從Vec衍生可通過參考基類被傳遞。

此外,由於您顯然計劃使用Vec作爲基類,因此您可能也希望使其dtor虛擬化。否則,如果您嘗試通過指針或對基引用銷燬派生類型的對象,則會出現未定義的行爲。

+0

「錯誤C2503:'Vec':基類不能包含零大小的數組」爲什麼這樣? (這是我繼承它之後) – NBcode 2012-03-30 21:02:11

+0

@NBcode:你需要指定'dim'的大小,例如:'double dim [10];'如果你不知道大小的前面(或者甚至可能是如果你這樣做),你幾乎肯定要使用'std :: vector dim;'代替。 – 2012-03-30 21:03:39

+0

我做了一個Vec3類,它是從Vec繼承而來的。是否可以強制重寫Add()方法中的參數爲「Vec3」? – NBcode 2012-03-30 21:40:50

2

使用常量引用VEC,或指向VEC

class Vec 
{ 
    double dim[]; 
public: 
    virtual void Add(const Vec& vector) = 0; 
}; 
2

是的,你傳遞一個指針或到Vec一個參考:從一個指針

class Vec 
{ 
    double dim[]; 
public: 
    Vec(void); 
    ~Vec(void); 
    virtual void Add(Vec* vector) = 0; 

}; 

轉換爲class那從Vec導出爲Vec*是隱含的。

如果按值傳遞,則會碰到對象切片並且行爲不會符合您的期望。

相關問題