簡體   English   中英

從抽象類繼承方法

[英]Method inheritance from abstract class

我是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'

我經常看到人們在列表元素上使用結構,但是我不確定這是否適合我的案例,因為不同類型的列表需要不同類型的結構。

謝謝

問題在於繼承是私有的,因此JulElem*Elem*不協變。 使用公共繼承:

class JulElem : public Elem
                ^^^^^^

該函數的返回類型不能被覆蓋。 您應該這樣做:在基礎中,將函數定義為:

virtual void noviElem(Elem** result);

參數“結果”用作輸出參數

似乎您需要使用模板。

這是一個例子:

template<class T>
T Add(T n1, T n2)
{
    T result;
    result = n1 + n2;

    return result;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM