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


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

    运行结果:

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

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

    A a;

    A b;

    a = b ; //这里会直接等号操作符,按照上面的道理,这里调用的是无参构造函数呢

  • 相关阅读:
    贝塞尔曲线实现的购物车添加商品动画效果
    Rxjava学习(一基础篇)
    OkHttp3源码详解(三) 拦截器-RetryAndFollowUpInterceptor
    ViewDragHelper详解(侧滑栏)
    linux系统装windows时需要注意的问题
    ARM GCC 内嵌汇编手册
    ADS的默认连接分析及编译器产生符号解惑
    ARM 的Thumb状态测试
    load-store/register-memory/register-plus-memory比较
    进位位(carry)与溢出位(overflow)的区别
  • 原文地址:https://www.cnblogs.com/xiaochige/p/8645297.html
Copyright © 2020-2023  润新知