• 写线性表用到模板类的问题
#ifndef LINEAR_H_INCLUDED
#define LINEAR_H_INCLUDED
/***************** abstract class ****************************/
#pragma once
#include<iostream>
class illegalparametervalue
{

};
template<class T>
class linearlist 
{
public:
	virtual ~linearlist() {};
	virtual bool empty()const = 0;
	virtual int size()const = 0;
	//virtual	T& get(int theindex)const = 0;
	//virtual int indexof(const T& theelement)const = 0;
	//virtual void ersae(int theindex) = 0;
	//virtual void insert(int theindex, const T & theelement) = 0;
	//virtual void output(ostream& out)const = 0;		
};
template<class T>
class arraylist : public linearlist<T>
{
protected:
	void checkindex(int theindex)const;
	T * element;
	int arraylength;
	int listsize;
public:
	arraylist(int initialcapacity = 10);
	arraylist(const arraylist<T>&);
	~arraylist() { delete[] element; }
	bool empty()const { return listsize == 0; }
	int size()const { return listsize;}
	//T& get(int theindex)const;
	//int indexof(const T& theelement)const;
	//void ersae(int theindex); 
	//void insert(int theindex, const T & theelement);
	//void output(ostream& out)const;
	void show();
	int capacity()const { return arraylength; }
};
#endif // LINEAR_H_INCLUDED
  • 头文件的cpp文件
#include"linear.h"
#include<iostream>
#include<sstream>
using std::ostringstream;
using std::endl;
using std::cout;
template<class T>
arraylist<T>::arraylist(int initialcapacity)
{
	if (initialcapacity < 1)
	{
		ostringstream s;
		s << "initialcapacity" << initialcapacity << "must > 1" << endl;
		cout << "noready" << endl;
		//throw illegalparametervalue;//(s.str());
	}
	arraylength = initialcapacity;
	element = new T[arraylength];
	listsize = 0;
	cout << "ready" << endl;
}
template<class T>
arraylist<T>::arraylist(const arraylist<T>& thearray)
{
	arraylength = thearray.arraylength;
	listsize = thearray.listsize;
	element = new T[arraylength];
	copy(thearray.element, thearray.element + listsize, element);
}
template<class T>
void arraylist<T>::  show()
{
	cout<<"66";
}
#include"linear.h"
#include <iostream>
#include"linear.cpp"
int main()
{
    std::cout << "Hello World!\n";
	arraylist<int> y(5); 
	std::cout << "1223";
	//y.show();
	//catch (illegalparametervalue & a) {std :: cout << "66 "; }

}

  • 注意:写类模板的时候要将头文件和cpp文件写在一块,或者在main函数的文件中加入include cpp,否则在main函数会报出没有声明的问题
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐