1.两个对象相加

先看代码:

#include <iostream>
using namespace std;

class Cperson
{
public:
	int age;
	double score;

	Cperson()
	{
		age = 12;
		score = 12.34;
	}
};

int main()
{
	Cperson ob1;
	Cperson ob2;
	Cperson ob3;
	ob3 = ob1 + ob2;

	system("pause");
	return 0;
}

直接把两个对象相加,编译器报错:

 

2.什么是运算符重载

1)自己定义符号的功能

2)跟函数重载一样,根据符号和传递参数的类型,选择执行哪一个运算符重载

3)格式:

类型 operator 符号 (参数1,参数2)

{

}

#include <iostream>
using namespace std;

class Cperson
{
public:
	int age;
	double score;

	Cperson()
	{
		age = 12;
		score = 12.34;
	}
};

Cperson operator+(Cperson &ob1, Cperson &ob2)
{
	ob1.age = ob1.age + ob2.age;
	ob1.score = ob1.score + ob2.score;
	return ob1;
}

int main()
{

	Cperson ob1;
	Cperson ob2;
	ob2 = ob1 + ob2;
	cout << ob2.age << "  " << ob2.score << endl;

	system("pause");
	return 0;
}

执行结果:

4)运算符重载中必须至少包含一个类类型的形参,普通两个整数或者浮点数等等的相加,不可以写运算重载

int operator+(int a, int b)
{
	a = a + b;
	return a;
}

报错:

 

3.有无返回值的区别

对于运算符来说,如果声明有返回值的话,那么就可以进行连续运算,如果无返回值就不行

#include <iostream>
using namespace std;

class Cperson
{
public:
	int age;
	double score;

	Cperson()
	{
		age = 12;
		score = 12.34;
	}
};

Cperson operator + (Cperson ob1, Cperson ob2)
{
	ob1.age = ob1.age + ob2.age;
	ob1.score = ob1.score + ob2.score;
	return ob1;
}

int main()
{

	Cperson ob1;
	Cperson ob2;
	ob2 = ob1 + ob2 + ob1 + ob2;
	cout << ob1.age << "  " << ob1.score << endl;
	cout << ob2.age << "  " << ob2.score << endl;

	system("pause");
	return 0;
}

执行结果:

 

4.类内运算符重载

1)重载运算符写在类的里面

2)运算符中省去输入类类型这一形参,因为在类中,函数的第一个形参默认为是this指针

例如一个对象+int型整数,重载运算符写成:

int operator+(int a)
{
    return this->age + a;
}

3)类内运算符重载只会被符号左边是类类型的运算调用,因为类内运算符默认输入的第一个参数是类类型,否则,只能在类外定义重载运算符

如何判断写在类内还是类外

1)看运算符左操作数是不是对象,是的就可以写在类内,不是就要写在类外

2)=、[]、()、->必须是成员

3)复合赋值运算符通常是成员,+=、<<=

4)改变对象状态的运算符,如递增递减和解引用,通常是成员

5)算术、关系、位运算,非成员

 

5.不能重载的运算符

1)::

2).*

3).

4)?.

Logo

GitCode AI社区是一款由 GitCode 团队打造的智能助手,AI大模型社区、提供国内外头部大模型及数据集服务。

更多推荐