[英]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.