c++ - 从抽象类继承方法

标签 c++ inheritance

我对 C++ 很陌生,不太确定如何重写基类中的方法。 我很抱歉在发布之前没有将代码翻译成英文,但我认为这不会有任何区别。

我想做的总结是为链接列表创建一个抽象基类,然后从中派生单/双/多链接/循环列表等。

这是代码:

#ifndef __LISTA_H__
#define __LISTA_H__

class Elem;
class JulElem;

class Lista // Abstract list class
{
public:
    Lista();
    ~Lista();

    virtual void dohvatiGlavu() = 0;
    virtual void dodajNaKraj(int vred) = 0;
    virtual void dodajIza(Elem* elem, int vr) = 0;
    virtual void obrisiIza(Elem* elem) = 0;
    virtual bool prazna() = 0;
    virtual int velicina() = 0;


protected:

    class Elem
    {
    protected:
        int vred;
    };

    virtual Elem* noviElem();

private:
    Elem* glava;
};

class Jul : Lista // Singly linked list
{
public:
     void dohvatiGlavu();
     void dodajNaKraj(int vred);
     void dodajIza(Elem* elem, int vr);
     void obrisiIza(Elem* elem);
     bool prazna();
     int velicina();

private:
    class JulElem : Elem
    {
    };

    JulElem* noviElem();

};

这是我得到的错误:

error C2555: 'Jul::noviElem': overriding virtual function return type differs and is not covariant from 'Lista::noviElem'

我经常看到人们对列表元素使用结构,但我不确定这是否适合我的案例场景,因为不同类型的列表需要不同类型的结构。

谢谢

最佳答案

问题在于继承是私有(private)的,因此 JulElem*Elem* 不协变。使用公共(public)继承:

class JulElem : public Elem
                ^^^^^^

关于c++ - 从抽象类继承方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19931274/

相关文章:

c++ - 键盘布局方向

c++ - 为什么 typeid 总是返回 false?

c++ - PyTorch C++ 扩展中的可选张量

c++ - 显然微不足道的函数调用中未处理的异常

java - 有没有一种特定的方法可以将父类(super class)的某些功能赋予某个子类?

c++ - 在这种情况下,如何在基类中设计我的 switch case 函数

c++ - 在 public 中使用 "using"继承 private 构造函数并没有使其 public

java - 如何创建继承对象的数组 - Java

C++ 复制、移动、交换、赋值和析构函数的继承?我需要哪个

ios - 在继承中传递变量 (Obj - C)