簡單測試過一下,應該沒有問題,如有疏忽,歡迎指正。
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...