继承派生问题
#ifndef linearlist_h#define linearlist_h
#include<fstream>
#include<iostream>
using namespace std;
template<class T>
class Linearlist
{
public:
Linearlist();
~Linearlist();
virtual int Size()const=0;
virtual int Length()const=0;
virtual int Search(T &x)const=0;
virtual int Locate(int i)const=0;
virtual bool getdata(int i,T &x)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 bool Isfull()const=0;
virtual void Sort()=0;
virtual void input()=0;
virtual void output()=0;
virtual Linearlist<T>operator=(Linearlist<T>&L)=0;
};
///////////////////////////////////////////////////////////////
#endif
#include<iostream>
#include"linearlist.h"
using namespace std;
const int defaultsize=100;
template<class T>
class Seqlist:public Linearlist<T>
{
protected:
T *data;//存放数组
int maxsize;//最大可容纳表项的项数
int last;//当前已存表项的最后位置(从0开始)
void resize(int newsize);//改变data数组空间的大小
public:
Seqlist(int sz=defaultsize);
Seqlist(Seqlist<T>&L);
~Seqlist(){delete[]data;}
int Size()const{return maxsize;}//计算表最大可容纳表项个数
int Length()const{return last+1;}//计算表长度
int Search(T &x)const;//搜索x在表中的位置,返回表项序号
int Locate(int i)const;//定位第i个表项,返回表项序号
bool getdata(int i,T &x)const//取第i个表项的值
{
if(i>0&&i<=last+1)
{
x=data[i-1];
return true;
}
else
return false;
}
void setdata(int i,T &x)//用x修改第i个表项的值
{
if(i>0&&i<=last+1)
data[i-1]=x;
}
bool Insert(int i,T &x);//插入x在第i个表项之后
bool Remove(int i,T &x);//删除第i个表项,通过x返回表项的值
bool Isempty(){return(last==-1)?true:false;}
bool Isfull(){return(last==maxsize-1)?true:false;}
void input();
void output();
Seqlist<T>operator=(Seqlist<T>&L);
};
template<class T>
Seqlist<T>::Seqlist(int sz)//指定参数sz定义数组的长度
{
if(sz>0)
{
maxsize=sz;
last=-1;//置表的实际长度为空
data=new T[maxsize];//创建顺序表存储数组
if(data==NULL)
{
cout<<"存储分配错误!"<<endl;
exit(1);
}
}
}
template<class T>
Seqlist<T>::Seqlist(Seqlist<T>&L)
//复制构造函数,用参数表中给出的已有顺序表初始化新建的顺序表
{
maxsize=L.Size();
last=L.Length()-1;//?-1
T value;
data=new T[maxsize];
if(data==NULL)
{
cout<<"存储分配错误!"<<endl;
exit(1);
}
for(int i=0;i<=last+1;i++)
{
L.getdata(i,value);
data[i-1]=value;
}
}
template<class T>
void Seqlist<T>::input()
{
cout<<"开始建立顺序表,请输入表中元素个数:";
while(1)
{
cin>>last;
if(last<=maxsize-1)
break;
cout<<"表中元素输入有误,范围不能超过"<<maxsize-1<<":";
}
for(int i=0;i<=last;i++)
{
cin>>data[i];
cout<<i+1<<endl;
}
};
/////////////////////////////////
#include<iostream>
#include"linearlist.h"
#include"Untitled222.cpp"
using namespace std;
int main()
{
Seqlist s;
s.input();
system("pause");
return 0;
}
以上是一个实现函数,我想问一下主函数如果想调用input()函数应该怎样调用,尝试了很久没找到方法。
另外如果程序运行模板函数Seqlist(int sz),Seqlist(Seqlist<T>&L)能实现其赋予的功能不?如不能应怎么办?