increment/decrement/dereference操作符

 1 #include<iostream>
 2 using namespace std;
 3 class INT
 4 {
 5  friend ostream& operator<<(ostream& os,const INT& i);
 6  public:
 7  INT(int i):m_i(i){};
 8
 9  //prefix:increament and then fetch
10  INT& operator++()
11  {
12   ++(this->m_i);//随着class的不同,该行应该有不同的操作
13   return *this;
14  }
15
16  //prefix:fetch and then increment
17  const INT operator++(int)
18  {
19   INT temp = *this;
20   ++(*this);
21   return temp;
22  }
23
24
25 //prefix:decrement and then fetch
26 INT& operator--()
27 {
28  --(this->m_i);
29  return *this;
30  }
31
32 //prefix:fetch and then decrement
33 const INT& operator--(int)
34 {
35  INT temp = *this;
36  --(*this);
37  return temp;
38 }
39
40 //dereference
41 int& operator*() const
42 { return (int&)m_i;}
43
44 private:
45 int m_i;
46 };
47
48 ostream& operator<<(ostream& os,const INT& i)
49 {
50  os<<‘[‘<<i.m_i<<‘]‘;
51  return os;
52 }
53
54 int main()
55 {
56 INT I(5);
57 cout<<I++;//[5]
58 cout<<++I;//[7]
59 cout<<I--;//[7]
60 cout<<--I;//[5]
61 cout<<*I;//5
62 }
时间: 2024-10-17 08:07:49

increment/decrement/dereference操作符的相关文章

使用Memcached Provider客户端的increment()||decrement()操作小结

使用Memcached Provider客户端对increment||decrement()操作小结: 1.store时只有以string类型存放int数字,才能正常increment.decrement,否则(increment\decrement)返回-1. 失败: this.cache.Add("num1", 100);//这里应该传入string. long newNum = this.cache.Increment("num1", 1);//失败,返回-1

More Effective C++ 条款6 区别 increment/decrement 操作符的前置(prefix)和后置(postfix)形式

1. 由于前自增和后自增操作符都是一元运算符,因此重载时通过在后自增中加一个int型参数(哑元参数)加以区分,当后自增被调用时,编译器自动在为该参数指定一个0值. 2. 前自增操作符返回调用它的对象的引用,后自增操作符返回const 临时对象 3. 由于前自增是返回的是原对象的引用,因而可以执行类似于++++a这样的式子: 但是后自增返回的是调用后自增操作符之前的对象的副本,如果后自增操作符返回的临时对象不是const,那么就可能会出现a++++的现象,而第二个++作用的其实是一个临时对象,这显

noobSTL-1-配置器-1

noobSTL-1-配置器-1 1.要点分析 1.1 可能让你困惑的C++语法 组态 即配置. 临时对象 一种无名对象.有时候会刻意地制造临时对象. 静态常量整数成员在class内部直接初始化 const成员:只能在构造函数后的初始化列表中初始化(C++98). C++11提供了类内初始化,因此内类常量可在声明类时进行类内初始化,因此该类内常量的作用域属于类级,即该类的所有对象均具有同一个值. static成员:初始化在类外,且不能加static修饰. const static成员:类只有唯一一

noobSTL-1-配置器-0

noobSTL-1-配置器-0 0.前言 STL的配置器(allocator),也叫内存分配器,负责空间配置与管理,简单地说,就是负责管理内存的. 从实现的角度来看,配置器是一个实现了动态空间配置.空间管理.空间释放的class template. 其中主要工作包括两部分1.对象的创建与销毁;2.内存的获取与释放. 1.技术要点 1.1 可能让你困惑的C++语法 组态 临时对象的产生与运用 静态常量整数成员在class内部直接初始化 increment/decrement/dereference

[c++primer][14]重载操作符与转换

14.1 重载操作符的定义 不能重载的操作符:.  ?:  sizeof  ::  .* 不能为任何内置类型定义额外的新的操作符:优先级和结合性是固定的:不再具备短路求值特性(不建议重载&&.||.逗号): 一般将算术和关系操作符定义为非成员函数,而将赋值操作符定义为成员: 使用重载操作符的方式: 1)  与内置类型使用操作符方式一样: 2)  也可像调用普通函数一样调用重载操作符函数,指定函数并传递适当类型适当数目的形参: item1 += item2; // expression ba

C++ 重载操作符与转换

<C++ Primer 4th>读书笔记 重载操作符是具有特殊名称的函数:保留字 operator 后接需定义的操作符号. Sales_item operator+(const Sales_item&, const Sales_item&); 声明了加号操作符,可用于将两个 Sales_item 对象“相加”并获得一个 Sales_item 对象的副本. 不能重载的操作符 :: .* . ?: 通过连接其他合法符号可以创建新的操作符.例如,定义一个 operator**以提供求

MoreEffectiveC++Item35(操作符)(条款5-8)

条款5 对定制的"类型转换函数"保持警惕 条款6 区别increment/decrement操作符的前值和后置形式 条款7 千万不要重载&&,||,和,操作符 条款8 了解不同意义的 new 和 delete

More Effective C++

条款一:指针与引用的区别 指针与引用看上去完全不同(指针用操作符'*'和'->',引用使用操作符'.'),但是它们似乎有相同的功能.指针与引用都是让你间接引用其他对象.你如何决定在什么时候使用指针,在什么时候使用引用呢? 首先,要认识到在任何情况下都不能用指向空值的引用.一个引用必须总是指向某些对象.因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量.相反,如果变量肯定指向一个对象,例如你的设计不允许变量为

C++的重要概念(综述)

1.变量和类型 1.1.标识符(字母数字下划线) 标识符不能使用关键字,C++区分大小写 alignas, alignof, and, and_eq, asm, auto, bitand, bitor, bool, break, case, catch, char, char16_t, char32_t, class, compl, const, constexpr, const_cast, continue, decltype, default, delete, do, double, dyn