运算符重载
1.两个对象相加先看代码:#include <iostream>using namespace std;class Cperson{public:int age;double score;Cperson(){age = 12;score = 12.34;}};int main(){Cperson ob1;Cperso...
·
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)?.
更多推荐



所有评论(0)