关于C++模板和运算符重载的一个小问题

C++语言 码拜 10年前 (2015-05-11) 1092次浏览 0个评论
 
template <class T>
class List
{
	struct Item
	{
		T data;
		Item *next;
	};
public:
	List();
	~List();
	T max(T x[],int n)
	{
		int i;
		T maxv = x[0];
		for (i = 1; i<n; i++)
			if (maxv<x[i])
				maxv = x[i];
		return maxv;
	};
	bool operator<(const T&, const T&);//有错
	bool isEmpty() const;
	int length() const;
	const T &at(int k) const;
	int search(const T &v);
	void remove(int k);
	void insert(int k, const T &v);
	void output();
private:
	Item *header;
};

我想对<进行运算符重载,因为max函数中使用了<,但是T的类型是未知的,可能是double 可能是char[]字符串,所以我想根据不同类型的T进行不同的比较,请问要怎么写,或者怎么改写这个max函数

20分
不需要对<进行重载,只要T是内置类型,都可以比较
楼主没啃过《stl源码剖析》吧。
基础语法的不足,这个任务对楼主是困难了些。
引用 1 楼 zhangxiangDavaid 的回复:

不需要对<进行重载,只要T是内置类型,都可以比较

那如果T是char*的字符串,<不就不能比较了么?不是要用strcmp么

引用 1 楼 zhangxiangDavaid 的回复:

不需要对<进行重载,只要T是内置类型,都可以比较

那个max里面我忘改了,有点问题,max就是返回List中T的最大值

20分
T的operator<应该由T提供,不应该list来提供,list的operator<应该是这样的
template<class T> bool operator<(const List<T>&, const List<T>&);

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于C++模板和运算符重载的一个小问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!