运算符重载详解(三)

4.重载双目运算符

class String
{
public:
	String(){ p = NULL; } //定义默认构造函数
	String(char* str);	  //声明构造函数
	friend bool operator > (String &string1, String &string2);//声明运算符函数为友元函数
	void display();
private:
	char *p;			  //字符型指针,用于指向字符串
};
String::String(char* str)
{ 	p = str; }
void String::display()
{ 	cout << p; }
bool operator > (String &string1, String &string2)
{
	if (strcmp(string1.p,string2.p) > 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}
Void compare(String &string1, String &string2)
{
if(operator >(string1,string2) > 0)
{
    String1.display(); cout<<”>”; String2.display();
}
}
int main()
{
	String string1("hello"), string2("Book");
	compare(string1, string2);
	return 0;
}

5.重载单目运算符
单目运算符(!a,-b,&c,*p,++i,–i等)只有一个操作数,因此运算符重载函数只有一个参数,如果运算符重载函数作为成员函数,则还可省略此参数。
例子:

class Time
{
public:
	Time(){ min = 0; sec = 0; }
	Time(int m,int s) : min(m),sec(s){}
	Time operator ++ ();
	void display(){ cout << min << ":" << sec; }
private:
	int min;
	int sec;
};
Time Time::operator++()
{
	if (++sec >= 60)
	{
		sec -= 60;
		++min;
	}
	return *this; //返回当前对象值
}
int main()
{
	Time time1(34, 0);
	for (int i = 0; i < 61;i++)
	{
		++time1; //运算符的操作数是一个对象,而且与运算符函数的类型相同
		time1.display();
	}
	return 0;
}

问题:前置自增运算符和后置自增运算符,他们的作用是不一样的,在重载时怎么区分?
C++约定:在自增(自减)运算符重载函数中,增加一个int型形参,就是后置自增(自减)运算符函数。
如:

Time operator ++ ();    //声明前置自增运算符“++”重载函数
Time operator ++ (int); //声明后置自增运算符“++”重载函数

例子:

class Time
{
public:
	Time(){ min = 0; sec = 0; }
	Time(int m, int s) : min(m), sec(s){}
	Time operator ++ ();	 //声明前置自增运算符++重载函数
	Time operator ++ (int);  //声明后置自增运算符++重载函数
	void display(){ cout << min << ":" << sec; }
private:
	int min;
	int sec;
};
Time Time::operator++()//前置自增运算符++重载函数
{
	if (++sec >= 60)
	{
		sec -= 60;
		++min;
	}
	return *this; //返回的是自加后的对象
}
Time Time::operator++(int) //后置自增运算符++重载函数
{
	Time temp(*this);
	sec++;
	if (sec >= 60)
	{
		sec -= 60;
		++min;
	}
	return temp;  //返回的是自加前的对象
}
int main()
{
	Time time1(34, 59),time2;
	time1.display(); //34:59
	++time1;
	time1.display(); //35:0
	time2 = time1++; //将自加前的对象的值赋值给time2
	time1.display(); //35:1
	time2.display(); //35:0
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值