码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-03-25 17:01:23      阅读:334      评论:0      收藏:0      [点我收藏+]

标签:运行   报错   出现   http   font   赋值   clu   out   blog   

 

 

 

 

 

  • 先看下面程序结果输出什么?
  •  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 }

 

运行结果:技术分享图片

 

 

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

 

 

 

 

 

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

 

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

标签:运行   报错   出现   http   font   赋值   clu   out   blog   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!