c++ 运算符重载(下)

本篇主要介绍几种常用的运算符重载

自增运算符++和自减运算符–

自增和自减运算符都是单目运算符,它们都分为前置和后置两种类型,那么我们要如何区分呢?

class Point {
private:
	int x, y;
public:
	Point(int i = 0, int j = 0)
	{
		x = i;
		y = j;
	}
	void Show()
	{
		cout << "(" << x << "," << y << ")" << endl;
	}
	Point operator ++();			
	Point operator ++(int);
};

Point Point ::operator++()
{
	++x;
	++y;
	return *this;
}

Point Point::operator++(int)
{
	Point ptold(x, y);
	x++;
	y++;
	return ptold;
}

int main()
{
	Point p1(20, 40), p2;
	p1.Show();
	p2 = p1++;
	p1.Show();
	p2.Show();
	p2 = ++p1;
	p1.Show();
	p2.Show();
	return 0;
}

在上述程序中,重载后置”++“运算符时,多了一个int型的参数,甚至没有定义具体的参数名,而此参数仅仅是为了区分前置和后置两种重载运算符函数

赋值操作符=

赋值运算符”=“是双目运算符,重载运算符时需要注意:赋值运算符必须是类的成元函数,不允许重载为友元函数;赋值运算符函数不能被派生类继承

string& operator =(string& str)
{
	if (this == &str)			//地址相同,表明是同一对象,此时退出
		return *this;		
	delete[] sbuf;				//释放原有空间
	length = str.length;
	sbuf = new char[length + 1];		//分配新的内存区域
	strcpy(sbuf, str.sbuf);				//复制字符串的内容
	return *this;
}

重载数组下标运算符"[ ]"

char& operator[](int i)
{
	if (i < 0 || i = length)			//对下标进行检查,超出范围则报错退出程序
	{
		cout << "下标越界错误!" << endl;
		exit(1);
	}
	return sbuf[1];					//sbuf:字符指针变量,指向动态分配的内存,用来存储字符串
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值