C 模版類實現順序表(繼承自抽象基類線性表)

2021-10-02 19:25:14 字數 2635 閱讀 6081

簡單測試過一下,應該沒有問題,如有疏忽,歡迎指正。

1、抽象基類——linearlist.h

#ifndef linearlist_h

#define linearlist_h

template class linearlist

virtual ~linearlist(){}

virtual int length()const = 0;

virtual int search(t& x)const = 0;

virtual t getdata(int i)const = 0;

virtual void setdata(int i, t& x) = 0;

virtual bool insert(int i, t& x) = 0;

virtual bool remove(int i, t& x) = 0;

virtual bool isempty()const = 0;

virtual void input() = 0;

virtual void output() = 0;

};#endif /* linearlist_h */

2、具體類——seqlist.h

#ifndef seqlist_h

#define seqlist_h

#include #include "linearlist.h"

const int defaultsize = 100;

template class seqlist : public linearlist

int size()const

int length()const

int search(t& x)const;

int locate(int i)const;

t getdata(int i)const

void setdata(int i, t& x)

bool insert(int i, t& x);

bool remove(int i, t& x);

bool isempty()const

bool isfull()const

void input();

void output();

seqlist& operator=(seqlist& l);

};#endif /* seqlist_h */

3、具體類seqlist中非內聯函式的實現——seqlist.cpp

#include #include #include "seqlist.h"

using std::cerr;

using std::endl;

using std::cout;

using std::cin;

template seqlist::seqlist(int sz)

}}template seqlist::seqlist(seqlist& l)

for(int i = 1; i <= last+1; i++)

data[i - 1] = l.getdata(i);

}template void seqlist::resize(int newsize)

if(newsize != maxsize)

int n = last+1;

t* srcptr = data;

t* destptr = newarray;

while(n--)

*destptr++ = *srcptr++;

delete data;

data = newarray;

maxsize = newsize;

}}template int seqlist:: search(t &x)const

template int seqlist::locate(int i)const

template bool seqlist::insert(int i, t &x)

template bool seqlist::remove(int i, t &x)

template void seqlist::input()

cout << "請逐個輸入表元素:" << endl;

for(int i = 0; i <= last; i++)

}template void seqlist::output()

template seqlist& seqlist::operator=(seqlist& l)

return *this;

}

4、主函式——main.cpp(簡單測試,並實現簡單的集合交並)

#include #include "seqlist.cpp"

void merge(seqlist& la, seqlist& lb);

void intersection(seqlist& la, seqlist& lb);

int main()

void merge(seqlist& la, seqlist& lb)

}}void intersection(seqlist& la, seqlist& lb)

else i ++;

}}

C 模版類實現單迴圈鍊錶(繼承自抽象基類線性表)

單迴圈鍊錶只是私有資料成員增加了乙個指向尾節點的指標last,尾節點指標指向附加頭節點,具體的函式實現只要注意這一點即可,與單鏈表差別不大,故只放出標頭檔案。ifndef circllist h define circllist h include linearlist.h template str...

C 虛繼承實現原理(虛基類表指標與虛基類表)

虛繼承和虛函式是完全無相關的兩個概念。虛繼承是解決c 多重繼承問題的一種手段,從不同途徑繼承來的同一基類,會在子類中存在多份拷貝。這將存在兩個問題 其一,浪費儲存空間 第二,存在二義性問題,通常可以將派生類物件的位址賦值給基類物件,實現的具體方式是,將基類指標指向繼承類 繼承類有基類的拷貝 中的基類...

C 類中的靜態字段始終繼承自基類

我們試想一下現在有乙個類parent,它有乙個static的int型別欄位number,然後如果類parent有三個子類child01 child02和child03,那麼改變parent.number的值的話,child01.number child02.number和child03.number...