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