首页 > 其他 > 详细

等号操作符重载为什么不能用友元函数大揭秘,以及函数没有等到重载的时候赋值会出现什么现象(盲点)

时间:2018-03-25 16:45:49      阅读:297      评论:0      收藏:0      [点我收藏+]

 

 

 

 

 

  • 先看下面程序结果输出什么?
  •  1 #include <iostream>
     2 using namespace std;
     3 
     4 class A
     5 {
     6 private:
     7     int x;
     8 public:
     9     A(){
    10         x=99;
    11         cout<<"看看这里是否会被调用"<<endl;
    12     }
    13 };
    14 
    15 int main()
    16 {
    17     A a;
    18     a = 7;
    19 }

    这里面,会报错,显示没有等号匹配现象。只有无参构造函数,函数类型的对象赋值会报错



  •  
    •  
    •  
    •   
  • 接下来是有无参构造函数和有参构造函数的类
  • #include <iostream>
    using namespace std;
    
    class A
    {
    private:
        int x;
    public:
        A(){
            x=99;
            cout<<"看看这里是否会被调用"<<endl;
        }
        A(int xx)
        {
            cout<<"Call A(int xx)"<<endl;
            x = xx;
        }
    
    };
    
    int main()
    {
        A a;
        a = 7;
    }

    运行结果为:

  •  技术分享图片

  •  

    这里可以理解为当类中没有定义等号赋值运算符重载的时候,类对象的赋值会调用相对应的参数构造函数

 

 

 

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class A
 5 {
 6 private:
 7     int x;
 8 public:
 9     A(){
10         x=99;
11         cout<<"看看这里是否会被调用"<<endl;
12     }
13     A(int xx)
14     {
15         cout<<"Call A(int xx)"<<endl;
16         x = xx;
17     }
18 
19     A operator=(int xx)   //重载赋值运算符运算
20     {
21         cout<<"Call A operator=(int xx)"<<endl;
22         x = xx;
23         return *this;
24     }
25 
26 };
27 
28 int main()
29 {
30     A a;
31     a = 7;
32 }

 

运行结果:技术分享图片

 

 

这里类中有等号操作符重载,所以会直接调用这个。

 

 

 

 

 

如果用友元函数重载等号操作符的时候,程序会调用参数构造函数的,这样会出错

 

等号操作符重载为什么不能用友元函数大揭秘,以及函数没有等到重载的时候赋值会出现什么现象(盲点)

原文:https://www.cnblogs.com/xiaochige/p/8645297.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!