标题:继承派生问题
取消只看楼主
zcdjt
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:99
专家分:181
注 册:2014-9-9
结帖率:85.71%
已结贴  问题点数:20 回复次数:0 
继承派生问题
#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)能实现其赋予的功能不?如不能应怎么办?
搜索更多相关主题的帖子: include public 
2014-09-26 15:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-436628-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.075388 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved