注册 登录
编程论坛 C++教室

怎样实现输入任何类型的数据都能比较大小

唐兵 发布于 2013-05-29 12:29, 1659 次点击
下面这个利用类模板只能实现字符串比较大小,我想实现输入任何类型的数据都能比较大小,请问怎样编啊
#include <iostream>
#include<string>
using namespace std;
template<class x>
class Compare
{public:
Compare(x q,x w)
{
    a=q,b=w;
}

x max()
{
   
    return(a>b?a:b );
}
    private:
        x a,b;
};
int main()
{
    Compare <string>d("qwee","arfg");

    cout<<"max is:"<<d.max()<<endl;
    return 0;
}
12 回复
#2
peach54602013-05-29 12:40
任意类型?
整形?浮点?字符串?
比较规则呢?
#3
apull2013-05-29 12:54
内置类型你这个就可以用

    Compare <int>e(123,456);
    cout<<"max is:"<<e.max()<<endl;

如果是你自己定义的类型,需要重载 > 运算符。
#4
唐兵2013-05-30 22:36
回复 2楼 peach5460
嗯,谢谢哈
#5
唐兵2013-05-30 22:38
回复 3楼 apull
嗯,可以用多态性吗?
#6
peach54602013-05-31 11:28
回复 4楼 唐兵
你只是想实现同类型的比较支持多类型
还是多类型可以混合比较?

同类型可以用模板

然后不管是同类型比还是混合比
都要用回调
#7
我有我梦2013-06-02 19:20
http://bbs.bccn.net/skin/img/sigline.gif我十分赞成peach5460,要多思考!!!方法我同意2楼主!!!
#8
唐兵2013-06-03 16:25
回复 6楼 peach5460
就是我想无论输入哪种类型都能比较,不管使用啥方法,能达到目的就行
#9
RobinWang2013-06-03 21:16
可以使用模板函数
#10
peach54602013-06-04 09:24
回复 8楼 唐兵
我想问的是
你所谓的无论哪种类型,在我看来有两种含义
1,比较的是同类型的,比如你可以比较int,比较string,比较double
但是要求进行比较的都是int,或者都是float
2,比较的是异类型,比如比较的数可以一边是int一边是string

第一种,直接用模板可以做得差不多...除了非POD类型,需要自己重载小于号
第二种,可以参照std::find之类的,让用户自己定义比较函数就行了
#11
唐兵2013-06-04 14:22
回复 10楼 peach5460
哈,第一种,懂了,第二种我再看看,谢谢
#12
唐兵2013-06-04 16:41
回复 10楼 peach5460
按照你说的第一种,重新写了下代码,但编译不能通过:
#include <iostream>
#include<string>
using namespace std;
template<class x>
int main()
{
    x a;
    x b;
    void get()
    {
        cout<<"input the datas:"<<endl;
        cin>>a>>b;
    }
    x max (x a, x b)
    {
        return a>b?a:b;
    }
    cout<<max()<<endl;
    return 0;
}
#13
peach54602013-06-04 21:05
得自己重载运算符吧...我懒得拷代码编译,你看是不是这个问题
1