首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

大叔大婶回答

2012-02-23 
在线等大叔大婶回答C/C++ code//LinearList.h/////////////////////////////////////////////////////////

在线等大叔大婶回答

C/C++ code
//LinearList.h///////////////////////////////////////////////////////////////////////////////////////////////********************************************************************************************ADT2.1:数据: 0个或者多个元素的线性序列(A0,A1,A2 ...An-1),其中最大允许长度为 MAXLISTSIZE方法:Create();      创建一个线性表    Destory();      撤销一个线性表IsEmpty();      若线性表空,则返回ture,否则返回false;    Length();     返回表中元素个数Find(i,x);      在x中返回表中下标为i的元素,若不存在,返回false,否则返回true.Search(x);    若x不在表中,则返回-1,否则返回x在表中的下标。InSert(i,x);  在第i个元素后面插入一个值为x的元素,若 i = -1,则插到最前面。插入成功,则返回ture,否则返回false;Delete(i);      删除第i个元素,删除成功,则返回ture,否则返回false;Update(i,x);  将第i个元素修改值为x,修改成功,则返回ture,否则返回false;OutPut(out);  把表送至输出流********************************************************************************************//////////////////////////////////////////////////////////////////////////////////////////////#include <iostream>using namespace std;template <class T>class LinearList{public:    virtual bool IsEmpty() const = 0;    virtual bool Length() const = 0;    virtual bool Find(int i,T& x) const = 0;    virtual int Search(T x) const = 0;    virtual Insert(int i,T x) = 0;    virtual bool Delete(int i) = 0;    virtual bool Update(int i ,T x) = 0;    virtual void Output(ostream& out) const = 0;protected:    int n; // 线性表的元素个数};////////////////////////////////////////////////////////////////////////////////////////////////////LinearList.CPP///////////////////////////////////////////////////////////////////////////////////////////////********************************************************************************************ADT2.1:数据: 0个或者多个元素的线性序列(A0,A1,A2 ...An-1),其中最大允许长度为 MAXLISTSIZE方法:Create();      创建一个线性表    Destory();      撤销一个线性表IsEmpty();      若线性表空,则返回ture,否则返回false;    Length();     返回表中元素个数Find(i,x);      在x中返回表中下标为i的元素,若不存在,返回false,否则返回true.Search(x);    若x不在表中,则返回-1,否则返回x在表中的下标。InSert(i,x);  在第i个元素后面插入一个值为x的元素,若 i = -1,则插到最前面。插入成功,则返回ture,否则返回false;Delete(i);      删除第i个元素,删除成功,则返回ture,否则返回false;Update(i,x);  将第i个元素修改值为x,修改成功,则返回ture,否则返回false;OutPut(out);  把表送至输出流********************************************************************************************//////////////////////////////////////////////////////////////////////////////////////////////#include "LinearList.h"#define  MAXSIZE 5template <class T>class SeqList:public LinearList<T>{public://////////////////////////////////////////////////////////////////////////SeqList(int mSize);~SeqList(){delete [] elements;}//////////////////////////////////////////////////////////////////////////bool    IsEmpty() const;int        Length() const;bool    Find(int i,T& x) const;int        Search(T x) const;bool    Insert(int i,T x);bool    Delete(int i);bool    Update(int i ,T x);void    Output(ostream& out) const;//////////////////////////////////////////////////////////////////////////private:    int maxLength;    T *elements;};//////////////////////////////////////////////////////////////////////////template <class T>SeqList<T>::SeqList(int mSize){    maxLength = mSize;    elements = new T[maxLength];    n = 0;}//////////////////////////////////////////////////////////////////////////template <class T>bool SeqList<T>::IsEmpty() const{    return n == 0;}//////////////////////////////////////////////////////////////////////////template <class T>int SeqList<T>::Length() const{    return n;}//////////////////////////////////////////////////////////////////////////template <class T>bool SeqList<T>::Find(int i,T& x) const{    if (i < 0 || i > n-1)    {        cout << "Out of Bound" << endl;        return  false;    }    x = elements[i]; // x  是要传出去值的变量 ::OUT    return true;}//////////////////////////////////////////////////////////////////////////template <class T>int SeqList<T>::Search(T x) const{    for(int j=0; j<n; j++)    {        if (elements[j] = x)        {            return j;        }        return -1;    }}//////////////////////////////////////////////////////////////////////////template <class T>bool SeqList<T>::Insert(int i,T x){    if (i < -1 || i > n-1)    {        cout << "Out of Bounds" << endl;        return false;    }    if (n == maxLength)    {        cout << "OverFlow" << endl;        return false;    }    for (int j = n-1; j > i; j--)    {        elements[j+1] = elements[j];    }    elements[i+1] = x;    n++;    return true;}//////////////////////////////////////////////////////////////////////////template <class T>bool SeqList<T>::Delete(int i){    if (!n)    {        cout << "UnderFlowe" << endl;        return false;    }    if (i < -1 || i > n-1)    {        cout << "Out of Bound" << endl;        return false;    }    for (int j = i+1; j < n; ++j )    {        elements[j-1] elements[j];    }    n--;    return true;}//////////////////////////////////////////////////////////////////////////template <class T>bool SeqList<T>::Update(int i ,T x){    if (i < -1 || i > n-1)    {        cout << "Out of Bound" << endl;        return false;    }    elements[i] = x;    return true;}//////////////////////////////////////////////////////////////////////////template <class T>void SeqList<T>::Output(ostream& out) const{    for (int i = 0; i < n; i++)    {        out << elements[i] << '  ';    }    out << endl;}int main(){    SeqList<int> iList(MAXSIZE);//     for (int i = 0; i < 9; i++)//     {//         iList.Insert(i,i+1);//     }    //iList.Output(cout);    return 0;}错误如下:----- Build started: Project: 线性表ADT, Configuration: Debug Win32 ------Compiling...LinearList.cppe:\myfile\线性表\线性表adt\linearlist.cpp(49) : error C2555: 'SeqList<T>::Length': overriding virtual function return type differs and is not covariant from 'LinearList<T>::Length'        with        [            T=int        ]        and        [            T=int        ]        e:\myfile\线性表\线性表adt\linearlist.h(33) : see declaration of 'LinearList<T>::Length'        with        [            T=int        ]        e:\myfile\线性表\线性表adt\linearlist.cpp(181) : see reference to class template instantiation 'SeqList<T>' being compiled        with        [            T=int        ]e:\myfile\线性表\线性表adt\linearlist.cpp(49) : error C2555: 'SeqList<T>::Insert': overriding virtual function return type differs and is not covariant from 'LinearList<T>::Insert'        with        [            T=int        ]        and        [            T=int        ]        e:\myfile\线性表\线性表adt\linearlist.h(36) : see declaration of 'LinearList<T>::Insert'        with        [            T=int        ]Build log was saved at "file://e:\MyFile\线性表\线性表adt\Debug\BuildLog.htm"线性表ADT - 2 error(s), 0 warning(s) 



[解决办法]
老了,砍不动了啊
[解决办法]
表让大家猜好不:)手头往往没有编译器啊,能把错误提示详细的描述一下下不:)
[解决办法]
子類定義的函數與父類描述不一樣。父類定義的純虛函數子類沒定義。

template <class T> class LinearList
virtual bool Length() const = 0;
virtual Insert(int i,T x) = 0; //沒定義返回類型,默認為 int


template <class T> class SeqList:public LinearList<T>
int Length() const; 
bool Insert(int i,T x);
//"只有返回值與父類不一致"的函數會覆蓋掉父類的同名函數。所以會產生編譯警告或錯誤。
//另外父類的純虛函數,子類沒實現,所以子類不能創建實例。

老了,勉為其難當一回大叔了。

[解决办法]
zou公子, 难道大叔的话没看见?
[解决办法]
论坛上可能数我最老了,不好意思,一不小心就要当伯伯了,哈哈

热点排行