#include <iostream>
using namespace std;
class A{
public:
int i;
A(int m = 0):i(m){
}
A operator++(){
cout<< "A operator++()" << endl;
++(this->i);
return *this;
}
A operator++(int ){
A x;
x.i = i;
i++;
cout<< "A operator++(int)" << endl;
return *this;
}
friend bool operator&&(const A &a, const A &b);
friend bool operator||(const A &a, const A &b);
};
bool operator&&(const A &a, const A &b)
{
cout<< "bool operator&&(A &a,A &b)" << endl;
return ( (a.i && b.i)? true:false);
}
bool operator|| (const A &a, const A &b)
{
cout<< "bool operator||(A &a,A &b)" << endl;
return ( (a.i || b.i)? true:false);
}
int main() //逻辑与运算符重载后,破坏原有的短路性
{
int i = 0,j = 0;
if(i && ++j){
}
cout << "j = " << j << endl;
j = 0;
if(i || j++){
}
cout << "j = " << j << endl;
A a(0),b(1);
if(a && ++b){
}
cout << "b.i = " << b.i << endl;
if(a && b++){
}
cout << "b.i = " << b.i << endl;
b.i = 0;
if(a || b++){
}
cout << "b.i = " << b.i << endl;
b.i = 0;
if(a || ++b){
}
cout << "b.i = " << b.i << endl;
return 0;
}
using namespace std;
class A{
public:
int i;
A(int m = 0):i(m){
}
A operator++(){
cout<< "A operator++()" << endl;
++(this->i);
return *this;
}
A operator++(int ){
A x;
x.i = i;
i++;
cout<< "A operator++(int)" << endl;
return *this;
}
friend bool operator&&(const A &a, const A &b);
friend bool operator||(const A &a, const A &b);
};
bool operator&&(const A &a, const A &b)
{
cout<< "bool operator&&(A &a,A &b)" << endl;
return ( (a.i && b.i)? true:false);
}
bool operator|| (const A &a, const A &b)
{
cout<< "bool operator||(A &a,A &b)" << endl;
return ( (a.i || b.i)? true:false);
}
int main() //逻辑与运算符重载后,破坏原有的短路性
{
int i = 0,j = 0;
if(i && ++j){
}
cout << "j = " << j << endl;
j = 0;
if(i || j++){
}
cout << "j = " << j << endl;
A a(0),b(1);
if(a && ++b){
}
cout << "b.i = " << b.i << endl;
if(a && b++){
}
cout << "b.i = " << b.i << endl;
b.i = 0;
if(a || b++){
}
cout << "b.i = " << b.i << endl;
b.i = 0;
if(a || ++b){
}
cout << "b.i = " << b.i << endl;
return 0;
}