C ++:有没有办法指定从另一个继承的通用类?

时间:2012-03-30 20:45:51

标签: c++ inheritance

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

};

我想将Vec中的Vec::Add()替换为“继承自Vec的任何类”。 有没有办法做到这一点?

3 个答案:

答案 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转换为VecVec*是隐含的。

如果按值传递,则会遇到对象切片,行为将不符合您的预期。