本篇主要介绍几种常用的运算符重载
自增运算符++和自减运算符–
自增和自减运算符都是单目运算符,它们都分为前置和后置两种类型,那么我们要如何区分呢?
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:字符指针变量,指向动态分配的内存,用来存储字符串
}