1+1=2我们会,计算机也会
人+人我们会,但计算机不会
我们能不能定义一种函数实现各种类型的相加呢?
person p3 = p1 + p2;
这里我给大家提一下两种重载方式
1.成员函数重载:
#include<iostream>
using namespace std;
class person
{
public:
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;
}
void test1()
{
person p1;
p1.m_a = 10;
p1.m_b = 10;
person p2;
p2.m_a = 20;
p2.m_b = 35;
person p3 = p1 + p2;
cout << "p3的m_a=" << p3.m_a << endl;
cout << "p3的m_b=" << p3.m_b << endl;
}
int main()
{
test1();
system("pause");
return 0;
}
2.全局函数重载:
#include<iostream>
using namespace std;
class person
{
public:
//成员函数重载+
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;
};
void test1()
{
person p1;
p1.m_a = 10;
p1.m_b = 10;
person p2;
p2.m_a = 20;
p2.m_b = 35;
person p3 = p1 + p2;
cout << "p3的m_a=" << p3.m_a << endl;
cout << "p3的m_b=" << p3.m_b << endl;
}
int main()
{
test1();
system("pause");
return 0;
}
3.我再补充一个打印重载,打印一个类
#include<iostream>
using namespace std;
class person
{
public:
int m_a;
int m_b;
};
//全局函数重载+
ostream& operator<<(ostream& cout,person &p)
{
cout << "m_a=" << p.m_a << " " << "m_b=" << p.m_b;
return cout;
}
void test1()
{
person p;
p.m_a = 10;
p.m_b = 10;
cout << p << endl;
}
int main()
{
test1();
system("pause");
return 0;
}
5.++重载
#include<iostream>
using namespace std;
class person
{
friend ostream& operator<<(ostream& cout, person p);
public:
person()
{
m_a = 10;
}
//前置++
person& operator++()
{
//先++
m_a++;
//再返回
return *this;
}
//后置++
person operator++(int)
{
//先记录他的值
person tem = *this;
//再递增
m_a++;
//最后将记录的返回
return tem;
}
private:
int m_a;
};
//全局函数重载+
ostream& operator<<(ostream& cout,person p)
{
cout << "m_a=" << p.m_a;
return cout;
}
void test1()
{
person p;
cout << p++;
cout << p << endl;
}
int main()
{
test1();
system("pause");
return 0;
}