class Vec
{
double dim[];
public:
Vec(void);
~Vec(void);
virtual void Add(Vec vector) = 0;
};
我想将Vec
中的Vec::Add()
替换为“继承自Vec
的任何类”。
有没有办法做到这一点?
答案 0 :(得分:5)
将参数更改为const Vec:
的引用virtual void Add(Vec const &vector) = 0;
派生自Vec
的类(公开)可以通过引用传递给基类。
此外,由于您显然计划将Vec
用作基类,因此您可能希望将其dtor设置为虚拟。否则,如果您尝试通过指针或对基数的引用来销毁派生类型的对象,则会得到未定义的行为。
答案 1 :(得分:2)
对Vec使用const引用,或者使用指向Vec的指针
class Vec
{
double dim[];
public:
virtual void Add(const Vec& vector) = 0;
};
答案 2 :(得分:2)
是的,您将指针或引用传递给Vec
:
class Vec
{
double dim[];
public:
Vec(void);
~Vec(void);
virtual void Add(Vec* vector) = 0;
};
从指针class
转换为Vec
到Vec*
是隐含的。
如果按值传递,则会遇到对象切片,行为将不符合您的预期。