zoukankan      html  css  js  c++  java
  • C++之++运算符重载问题

    记录++之前先记一下左右值和存取数据的问题

    数据的存放分三个部分,堆区,栈区和静态变量区

    左值可以更改,右值不能更改

    栈区和堆区存储的都是左值,可以随意更改其值,静态变量区部分数据是右值,比如const修饰的值,函数创建的临时变量,都不可更改

    前缀++重载,直接直接++操作,返回本身即可

    后缀++重载,需创建临时变量,对原元素执行+1操作,返回临时变量,返回值类型用const修饰,让返回值成为一个右值,不可修改,防止出现(++(class++))的情况

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 class cl{
     4 public:
     5     int x;
     6     cl(){}
     7     cl(const cl& c){
     8         cout<<"执行复制构造函数
    ";
     9         x=c.x;
    10     }
    11     cl& operator++(){//前缀++重载
    12         x+=3;
    13         return *this;
    14     }
    15     const cl operator++(int ){//后缀++重载
    16         cl mid = *this;
    17         this->x+=2;
    18         return mid;
    19     }
    20     void prin(){
    21         cout<<"cl x = "<<x<<endl;
    22     }
    23 };
    24 
    25 int func()
    26 {
    27     int x=1;
    28     return x;
    29 }
    30 int main()
    31 {
    32     cl c1;
    33     c1.x=0;
    34     cl c2=(c1++);
    35     cout<<c1.x<<" "<<c2.x<<"
    ";
    36 
    37     int a=10;
    38     int x=(++(a++));//报错,a++产生的临时变量是右值,不可改变
    39     
    40     return 0;
    41 }
  • 相关阅读:
    Git 进阶学习
    My SQL 学习打卡 60天搞定mysql
    设计模式 学习笔记
    docker 从入门到精通
    java 异步线程下的顺序控制
    Maven 工程 如何添加 oracle 驱动 问题
    Hive 2.1.1 学习笔记
    Linux 下 MySQL-5.6.16 安装
    hadoop2.x HDFS HA linux环境搭建
    [LC] 1146. Snapshot Array
  • 原文地址:https://www.cnblogs.com/wa007/p/9380184.html
Copyright © 2011-2022 走看看