
C++语言 结构体/类 运算、比较大小
比如C++中有string类,这个类可以比较大小(str1>str2)、进行加法运算(str1=str2+str3)如何另一个自己的类/结构体[最好是结构体,我不喜欢用类...
比如C++ 中有string类,这个类可以比较大小(str1>str2)、进行加法运算(str1=str2+str3)
如何另一个自己的 类/结构体[最好是结构体,我不喜欢用类] 也可以比较大小、加减乘除呢? 展开
如何另一个自己的 类/结构体[最好是结构体,我不喜欢用类] 也可以比较大小、加减乘除呢? 展开
展开全部
重载运算符啊~~
PS:结构体=类,只是默认数据保密类型和继承类型不一样而已...
给个例子:
#define size_max UINT_MAX//字符串长度的最大值
typedef unsigned STR_SIZE_TYPE;//字符串长度变量声明
typedef char STR_CHAR;//字符串字符类型
const unsigned NAGASA=16;//重载>>中内存开辟递增数量级
struct string
{
private:
STR_CHAR *str;
STR_SIZE_TYPE len;
protected:
public:
string();
string(const STR_CHAR &);
string(const STR_CHAR *);
string(const string &,STR_SIZE_TYPE n=0,STR_SIZE_TYPE m=size_max);
string(const STR_SIZE_TYPE &,const STR_CHAR &);
string(const STR_CHAR *,const STR_SIZE_TYPE &);
virtual ~string();
string & operator =(const string &);
string & operator =(const STR_CHAR *);
string & operator =(const STR_CHAR &);
string & operator +=(const string &);
string & operator +=(const STR_CHAR *);
string & operator +=(const STR_CHAR &);
STR_CHAR & operator [](const STR_SIZE_TYPE & i);
const STR_CHAR & operator [](const STR_SIZE_TYPE & i)const;
STR_SIZE_TYPE size()const
{return len;};
STR_SIZE_TYPE has(const STR_CHAR &)const;//返回string对象中指定参数字符的数量
void up();//将string对象中的小写字母转换为大写字母
void low();//将string对象中的大写字母转换为小写字母
void swap(string &);
bool empty()const;
void resize(const STR_SIZE_TYPE,const STR_CHAR ch=' ');
void clear();
friend std::ostream & operator <<(std::ostream &,const string &);
friend std::istream & operator >>(std::istream &,string &);
friend bool operator <(const string &,const string &);
friend bool operator >(const string &,const string &);
friend bool operator ==(const string &,const string &);
friend bool operator !=(const string &,const string &);
friend bool operator <=(const string &,const string &);
friend bool operator >=(const string &,const string &);
friend string operator +(const string &,const string &);
friend void swap(string &,string &);
typedef STR_SIZE_TYPE size_type;
};
bool operator <(const string & st1,const string & st2)
{
if(strcmp(st1.str,st2.str)<0)
{
return true;
}
else
{
return false;
}
}
bool operator >(const string & st1,const string & st2)
{
if(strcmp(st1.str,st2.str)>0)
{
return true;
}
else
{
return false;
}
}
bool operator ==(const string & st1,const string & st2)
{
if(0==strcmp(st1.str,st2.str))
{
return true;
}
else
{
return false;
}
}
bool operator !=(const string & st1,const string & st2)
{
if(0==strcmp(st1.str,st2.str))
{
return false;
}
else
{
return true;
}
}
bool operator <=(const string & st1,const string & st2)
{
if(strcmp(st1.str,st2.str)>0)
{
return false;
}
else
{
return true;
}
}
bool operator >=(const string & st1,const string & st2)
{
if(strcmp(st1.str,st2.str)<0)
{
return false;
}
else
{
return true;
}
}
PS:结构体=类,只是默认数据保密类型和继承类型不一样而已...
给个例子:
#define size_max UINT_MAX//字符串长度的最大值
typedef unsigned STR_SIZE_TYPE;//字符串长度变量声明
typedef char STR_CHAR;//字符串字符类型
const unsigned NAGASA=16;//重载>>中内存开辟递增数量级
struct string
{
private:
STR_CHAR *str;
STR_SIZE_TYPE len;
protected:
public:
string();
string(const STR_CHAR &);
string(const STR_CHAR *);
string(const string &,STR_SIZE_TYPE n=0,STR_SIZE_TYPE m=size_max);
string(const STR_SIZE_TYPE &,const STR_CHAR &);
string(const STR_CHAR *,const STR_SIZE_TYPE &);
virtual ~string();
string & operator =(const string &);
string & operator =(const STR_CHAR *);
string & operator =(const STR_CHAR &);
string & operator +=(const string &);
string & operator +=(const STR_CHAR *);
string & operator +=(const STR_CHAR &);
STR_CHAR & operator [](const STR_SIZE_TYPE & i);
const STR_CHAR & operator [](const STR_SIZE_TYPE & i)const;
STR_SIZE_TYPE size()const
{return len;};
STR_SIZE_TYPE has(const STR_CHAR &)const;//返回string对象中指定参数字符的数量
void up();//将string对象中的小写字母转换为大写字母
void low();//将string对象中的大写字母转换为小写字母
void swap(string &);
bool empty()const;
void resize(const STR_SIZE_TYPE,const STR_CHAR ch=' ');
void clear();
friend std::ostream & operator <<(std::ostream &,const string &);
friend std::istream & operator >>(std::istream &,string &);
friend bool operator <(const string &,const string &);
friend bool operator >(const string &,const string &);
friend bool operator ==(const string &,const string &);
friend bool operator !=(const string &,const string &);
friend bool operator <=(const string &,const string &);
friend bool operator >=(const string &,const string &);
friend string operator +(const string &,const string &);
friend void swap(string &,string &);
typedef STR_SIZE_TYPE size_type;
};
bool operator <(const string & st1,const string & st2)
{
if(strcmp(st1.str,st2.str)<0)
{
return true;
}
else
{
return false;
}
}
bool operator >(const string & st1,const string & st2)
{
if(strcmp(st1.str,st2.str)>0)
{
return true;
}
else
{
return false;
}
}
bool operator ==(const string & st1,const string & st2)
{
if(0==strcmp(st1.str,st2.str))
{
return true;
}
else
{
return false;
}
}
bool operator !=(const string & st1,const string & st2)
{
if(0==strcmp(st1.str,st2.str))
{
return false;
}
else
{
return true;
}
}
bool operator <=(const string & st1,const string & st2)
{
if(strcmp(st1.str,st2.str)>0)
{
return false;
}
else
{
return true;
}
}
bool operator >=(const string & st1,const string & st2)
{
if(strcmp(st1.str,st2.str)<0)
{
return false;
}
else
{
return true;
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询