C++中自定义类2种自增运算的代码实现和区别

本文首发于个人博客https://kezunlin.me/post/caef83a3/,欢迎阅读最新内容!

cpp i++ vs ++i for user defined class

Guide

code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <vector>
#include <iostream>
using namespace std;

class Integer
{
public:
    Integer(int value): v(value)
    {
        cout << "default constructor" << endl;
    }
    Integer(const Integer &other)
    {
        cout << "copy constructor" << endl;
        v = other.v;
    }
    Integer &operator=(const Integer &other)
    {
        cout << "copy assignment" << endl;
        v = other.v;
        return *this;
    }

    // ++i  first +1,then return new value
    Integer &operator++()
    {
        cout << "Integer::operator++()" << endl;
        v++;
        return *this;
    }

    // i++  first save old value,then +1,last return old value
    Integer operator++(int)
    {
        cout << "Integer::operator++(int)" << endl;
        Integer old = *this;
        v++;
        return old;
    }

    void output()
    {
        cout << "value " << v << endl;
    }
private:
    int v;
};

void test_case()
{
    Integer obj(10);
    Integer obj2 = obj;
    Integer obj3(0);
    obj3 = obj;
    cout << "--------------" << endl;
    cout << "++i" << endl;
    ++obj;
    obj.output();
    cout << "i++" << endl;
    obj++;
    obj.output();
}

int main()
{
    test_case();
    return 0;
}

output

default constructor
copy constructor
default constructor
copy assignment
--------------
++i
Integer::operator++()
value 11
i++
Integer::operator++(int)
copy constructor
value 12

Reference

History

  • 2019/11/08: created.

Copyright

Copyright

原文地址:https://www.cnblogs.com/kezunlin/p/12125708.html

时间: 2024-12-10 12:03:39

C++中自定义类2种自增运算的代码实现和区别的相关文章

(转).Net中自定义类作为Dictionary的key详解

在定义数据结构时,Dictionary提供了快速查找数据的功能,另外Dictionary< TKey, TValue >属于key-value键值对数据结构,提供了泛型的灵活性,是数据结构的一个利器,但是目前拥有的string,int,bool等基础数据类型并不能满足我们的需求,那么如何把自定义的数据类作为Dictionary的key呢? 本文对Dict的内部实现会有提出,但不详细讨论,以解决标题问题为主,如果有想详细了解Dictionary内部实现等更多细节,请转到官网: https://m

C#中自定义类数组和结构数组的使用

如有雷同,不胜荣幸,若转载,请注明 最近在很多项目中发现很多时候给定的数组要实现某个逻辑或处理很是麻烦,一维数组,二维数组,,,等等需要经过n多转换,还不如自己写一个自定义数组,既方便又节省时间,以下是类数组,其实相当于定义了一个实体类一样,只是使用的时候写成数组的形式在用 Class RGB { public byte red; public byte green; public byte blue; public RGB(byte r,byte g,byte b) { this.red =

ExtJS 中自定义类

首先我们来看一看在Javascript中,是怎样自定义类的: var Person = function (name, age) { this.Name = ""; this.Age = 0; this.Say = function (msg) { alert(this.Name + " Says : " + msg); } this.init = function (name, age) { this.Name = name; this.Age = age; }

ASP.NET中自定义类使用Session保存信息

Session是Page类的内置对象,可以直接使用Session,但是普通的类,比如一般处理类就无法直接使用.之前我在Handler类中使用类似System.Web.HttpContext.Current.Session["userid"];但是调试显示System.Web.HttpContext.Current.Session一直为null. 解决办法:让自定义的类实现IRequiresSessionState接口,同时加入:using System.Web.SessionState

.net中 自定义类的属性和关键字重名的解决方法

使用ztree时,用到checkbox勾选操作,当编辑操作时已勾选的需要被勾上,需要用到checked属性(checked=true),而C#类中,checked与关键字发生冲突,查找了解决办法: 方法有三... 1.大写...Checked...2.加@[email protected]   (我使用了此方法) 3.指定序列化成员名称... [DataMember(Name = "checked")] public bool IsChecked; 序列化后自动把@去掉了

Qt中自定义类的方法

参考百度文库的一种方法,讲解还不错,贴在这里,大家可以参考一下 http://wenku.baidu.com/link?url=8LD6wyXHcVwq-ojHaOAwg8zg4MVaJYy4jDrq72s6bvExRl2jxsnOUiF2ydT_7A3m941N1zyab1CA1yMsjihZdZVuK--KHuapEb-SSmVG_Wi###

Java中创建对象的5种方式 &amp;&amp;new关键字和newInstance()方法的区别

转载:http://www.kuqin.com/shuoit/20160719/352659.html 用最简单的描述来区分new关键字和newInstance()方法的区别:newInstance: 弱类型.低效率.只能调用无参构造.new: 强类型.相对高效.能调用任何public构造. newInstance( )是一个方法,而new是一个关键字,其次,Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数,而使用new关键字生成对象没有这个限制.Cla

Android中Path类的lineTo方法和quadTo方法画线的区别

当我们需要在屏幕上形成画线时,Path类的应用是必不可少的,而Path类的lineTo和quadTo方法实现的绘制线路形式也是不一样的,下面就以代码的实现来直观的探究这两个方法的功能实现区别: 1. Path--->quadTo(float x1, float y1, float x2, float y2): 该方法的实现是当我们不仅仅是画一条线甚至是画弧线时会形成平滑的曲线,该曲线又称为"贝塞尔曲线"(Bezier curve),其中,x1,y1为控制点的坐标值,x2,y2为终

C++中定义类的对象:用new和不用new的区别

Point p1; Point *p2=new Point(); p1 由系统创建并释放,不用担心会出现内存泄露,但是生命期只有在本区域的大括号内,出了大括号就没用了. P2 是指针,要自己释放,用不好很危险,用好了功能强大,因为他可以赋值给全局的变量,一下子从局部变量变成全局变量,还能把对象作为函数返回值. p1 是在栈空间申请Point大小的空间.new的内存区域是在栈,会自动分配空间,一般在局部变量时使用,函数结束后会自动释放空间. p2 这是向堆空间申请一个sizeof(Point)大小