操作符重载2

&&和||操作符也可以重载,但是不建议重载因为重载时短路与和短路或都会‘失效’,即不论实际第一个表达式为true还是false,短路与和短路或后面的表达式都会继续判断,这样会导致结果和预期可能不同!

 1 //对于标准数据类型直接使用&&和||
 2 //假设+操作符已经重载
 3 
 4 Test t{
 5 public:
 6     Test(int a){
 7         this->a=a;
 8     }
 9     bool operator&&(Test &another){
10         if(this->a && another.a){
11             return true;
12         }
13         else{
14             return false;
15         }
16     }
17 private:
18     int a;
19 }
20 
21 int main(void){
22     int a = 0;
23     if (a && (a = 1)
24     {
25         cout<<"true..."<<endl;
26     }
27     cout<<a<<endl;//因短路与的关系,此时a=0
28 
29     Test t1(0);
30     Test t2(1);
31     if (t1 && (t1 + t2)
32     {
33         cout<<"true..."<<endl;//即使t1为false,(t1 + t2)也执行了
34     }
    return 0;
35 }

猜你喜欢

转载自www.cnblogs.com/zzx1905/p/operator_reload2.html
今日推荐