1、()重载
#include <iostream>
using namespace std;
class F
{
public:
//成员函数重载
int operator()(int a, int b)
{
return a * a + b * b;
}
};
class F2
{
public:
//函数调用
int MenFunc(int a, int b)
{
return a * a + b * b;
}
};
int main()
{
F f;
f(2, 4);
F2 f2;
f2.MenFunc(2,4);
cout << "helow" << endl;
while (1);
return 0;
}
2、&&重载
//短路规则:if(a1&&(a1+a2)){cout<<"短路规则"<<endl;} 若a1=0,不会执行(a1+a2),直接执行输出
#include <iostream>
using namespace std;
class Test
{
int i;
public:
Test(int i)
{
this->i = i;
}
//成员函数重载
Test operator+(const Test & obj)
{
Test ret(0);
cout << "执行+重载" << endl;
ret.i = i + obj.i;
return ret;
}
bool operator&&(const Test &obj)
{
cout << "执行&&重载函数" << endl;
return i && obj.i;
}
};
class F2
{
public:
//函数调用
int MenFunc(int a, int b)
{
return a * a + b * b;
}
};
int main()
{
int a1 = 0;
int a2 = 1;
//短路规则
//&&操作符的结合顺序是从左到右
if (a1 && (a1 + a2))
{
cout << "前者为假,不执行后者,直接执行输出" << endl;
}
Test t1 = 0;
Test t2 = 1;
if (t1 && (t1 + t2))
{
//t1&&(t1.operator+(t2));
//t1.operator( t1.operator+(t2) )
cout << "两个函数都被执行了,而且先执行+" << endl;
}
cout << "helow" << endl;
while (1);
return 0;
}
**结论:&&可以实现重载,但不能实现短路规则:**