2012-03-30 83 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*是隐含的。

如果按值传递,则会碰到对象切片并且行为不会符合您的期望。

相关问题