#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
// 对于内置的数据类型,编译器知道如何进行运算,但是对于自定义的数据类型,编译器不指定如何运算。
// 利用运算符重载,可以让符号有新的定义
// 利用加号重载,实现p1+p2数据类型相加操作
// 利用成员函数 和 全局函数 都可以实现重载。
// 关键字operator+
// 成员本质 p1.operator+(p2)
// 全局本质 operator+(p1,p2);
// 简化:p1+p2
// 运算符重载可以进行函数重载。
// 减法重载到加号:会导致混乱
// 系统自带的运算符不能重载
class Person
{
public:
Person(){};
Person(int a, int b) :m_A(a), m_B(b)
{};
//利用成员函数实现加号运算符重载
// Person operator+(Person &p)
// {
// Person temp;//要写默认构造
// temp.m_A = this->m_A + p.m_A;
// temp.m_B = this->m_B + p.m_B;
// return temp;
// }
int m_A;
int m_B;
};
//利用全局函数实现加号运算符重载
Person operator+(Person &p1, Person &p2)
{
Person temp;
temp.m_A = p1.m_A + p2.m_A;
temp.m_B = p1.m_B + p2.m_B;
return temp;
}
//两个都提供会出现二义性
//运算符重载可以发生函数重载
Person operator+(Person &p1, int num)
{
Person temp;
temp.m_A = p1.m_A + num;
temp.m_B = p1.m_B + num;
return temp;
}
void test01()
{
Person p1(10, 10);
Person p2(20, 20);
Person p3 = p1 + p2;
//Person p3 = operator+(p1, p2); //全局函数的本质调用
//Person p3 = p1.operator+(p2); //成员函数的本质调用
cout << "p3.m_A = " << p3.m_A << " p3.m_B = " << p3.m_B << endl;
//运算符重载 可不可以 发生函数重载?
//p1 + 10;
}
int main(){
test01();
system("pause");
return EXIT_SUCCESS;
}
肆-拾陆|加号运算符重载
最新推荐文章于 2024-11-04 19:24:37 发布