| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 449 人关注过本帖
标题:继承派生问题
只看楼主 加入收藏
zcdjt
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:99
专家分:181
注 册:2014-9-9
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:2 
继承派生问题
#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
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:20 
模板成员不能是虚函数,派生继承的时候自动继承虚函数Seqlist其实也是虚函数。
网上搜为什么模板成员不能是虚函数。


Member template functions cannot be declared virtual.Current compiler technology experts to be able to determine the size of a class’s virtual function table when the class is parsed.Allowing virtual member template functions woule require knowing all calls to such member functions everywhere in the program ahead of time.This is not feasible,especially for multi-file projects.
来自《thinking in c++》
2014-09-26 20:59
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:0 
下次别发代码用文字叙述下,如果不是模板,用指针引进访问就可以了
2014-09-26 21:09
快速回复:继承派生问题
数据加载中...
 
   



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

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