从纯虚拟模板类派生

时间:2016-05-07 00:01:47

标签: c++ class templates virtual abstract

我相信我的问题很简单,但我无法克服它。

我有抽象模板类aghContainer和子模板类aghVector。我试图创建一个aghVector对象,但是我得到一个错误,我无法创建抽象类的对象。我很确定我实现了所有方法,但也许我想念一些......

aghContainer:

template <typename T>
class aghContainer {
public:
    virtual ~aghContainer() {}
    virtual void append(T const&) = 0;
    virtual void append(aghContainer<T> const& right) = 0;
    virtual bool replace(const int, T const&) = 0;
    virtual T& at(const int) const = 0;
    virtual int size(void) const = 0;
    virtual bool remove(const int) = 0;
    virtual void clear(void) = 0;
    virtual bool isEmpty(void) = 0;
    virtual int indexOf(T const& _value, int _from = 0) const = 0;
    virtual bool contains(T const& _value, int _from = 0) const = 0;
    virtual void print(ostream&) const = 0;
    virtual bool equal(aghContainer<T> const& right) const = 0;
    virtual bool operator==(aghContainer<T> const& right) const;
    virtual bool operator!=(aghContainer<T> const& right) const;
    virtual T& operator[](const int n) const;
    virtual aghContainer<T>& operator+=(T const& element);
    virtual aghContainer<T>& operator+=(aghContainer<T> const& right);
    virtual aghContainer<T>& operator<<(T const& element);
    virtual aghContainer<T>& operator<<(aghContainer<T> const& right);
    friend ostream& operator<<(ostream&, aghContainer<T> const& right);
};

aghVector:

template <typename T>
class aghVector :
    public aghContainer<T> {
public:
    aghVector();
    ~aghVector();
    void append(T const&);
    void append(aghContainer<T> const& right);
    bool insert(const int, T const&);
    bool replace(const int, T const&);
    T& at(const int) const;
    int size(void) const;
    bool remove(const int);
    void clear(void);
    bool isEmpty(void);
    int indexOf(T const& _value, int _from = 0);
    bool contains(T const& _value, int _from = 0) const;
    void print(ostream&) const;
    bool equal(aghContainer<T> const& right) const;

private:
    T* vector;
    unsigned int elements;
    void destroyVector();
};

错误:

  

&#39; aghVector&#39;:无法实例化抽象类Data-Container G:\ CPP \ Data-Container \ ex3main.cpp 101

2 个答案:

答案 0 :(得分:2)

aghContainer班级你有这个功能

void append(aghContainer<T> const& right) = 0;

然后在aghVector中你有这个功能:

void append(aghVector<T> const& right);

问题是这些是两个不同的函数,这意味着你不要覆盖父类append函数。导致aghVector仍然是一个抽象类。

答案 1 :(得分:2)

我可以快速查看一些问题。

aghContainer

 void append(aghContainer<T> const& right) = 0;

并在aghVector

  void append(aghVector<T> const& right);

实际上使用不同的参数类型重载函数(因为aghVector是与aghContainer不同的类型。继承的append()将被隐藏而不会被覆盖。

equal()的类似问题。

indexOf()aghContainer的声明为const,而aghVector中的声明不是aghVecvtor。因此,echo "#define ENABLE_SUBIDS 1" >> config.h 中的版本再次隐藏了继承的函数,并且不会覆盖它。