第三十七节 C++ 运算符重载 - 单目运算符

原创 2018年04月16日 16:35:15
#include <iostream>
using namespace std;

/*运算符重载 -- 单目运算符 ++, --, *, -> 
 格式: return_type operator symbol(params list...) 
*/

class  Base {
private:
	unsigned int numBase;
public:
	/*operator ++i 的实现*/
	Base& operator ++ () {
		++numBase;
		return *this; //this指当前对象的地址,*this指当前对象
	}

	/*operator --i 的实现*/
	Base& operator -- () {
		--numBase;
		return *this; //this指当前对象的地址,*this指当前对象
	}

	/*operator i++ 的实现, 实现后++,需要在()加参数*/
	Base operator ++ (int) {
		Base CopyObject(numBase);
		++numBase;
		return CopyObject;
	}
	/*operator i-- 的实现, 实现后--,需要在()加参数*/
	Base operator -- (int) {
		Base CopyObject(numBase);
		--numBase;
		return CopyObject;
	}

	/*访问属性numBase的接口*/
	void getNumBase() {
		cout << "    The Base num = " << numBase << endl;
	}

	Base(unsigned int initNum) : numBase(initNum) { 
		cout << "    Base constructor, init num = " << numBase << endl; }
//	~Base() { cout << "~Base deconstructor" << endl; }

};


int main()
{
	cout << "--- Create new object" << endl;
	Base Object(10); //栈上实例化对象
	Object.getNumBase();  //numBase = 10

	cout << "--- ++i, --i " << endl;
	++Object;   //先加后用
	++Object;
	Object.getNumBase();  //numBase = 12
	--Object;  //先减后用
	Object.getNumBase();  //numBase = 11

	cout << "--- i++, i-- " << endl;
	Object++;  //先用后加
	Object.getNumBase();  //numBase = 12
	Object--;
	Object.getNumBase();  //numbase = 11

	return 0;
}

output: 

--- Create new object
    Base constructor, init num = 10
    The Base num = 10
--- ++i, --i
    The Base num = 12
    The Base num = 11
--- i++, i--
    Base constructor, init num = 11
    The Base num = 12
    Base constructor, init num = 12
    The Base num = 11

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dddd0216/article/details/79962542

C++运算符重载之重载单目运算符

单目运算符只有一个操作数,但是其重载方法类似于双目运算符,在这里以重载单目运算符++为例,介绍单目运算符的重载: 注意“++”和“--”运算符有两种使用方式,前置自增运算符和后置自增运算符,它们的作...
  • xckkcxxck
  • xckkcxxck
  • 2017-04-09 10:52:11
  • 710

C++读书笔记之 单目运算符重载 取负符号 - 重载

#include using namespace std; class Distance { private: double feet; // 0 to ...
  • shihui512
  • shihui512
  • 2013-05-15 23:12:04
  • 1882

运算符重载需要注意的事项

(1) 一般情况下,单目运算符最好重载为类的成员函数;双目运算符则最好重载为类的友元函数。 (2) 以下一些双目运算符不能重载为类的友元函数:=、()、[]、->。 (3) 类型转换函数只...
  • brk1985
  • brk1985
  • 2014-01-14 11:47:19
  • 746

用c++ 编写一个程序,重载运算符“+”,实现字符串的连接。

  • 2009年12月24日 08:26
  • 833B
  • 下载

C++--模板遇上运算符重载

#include using namespace std; template class Complex { friend Complex MySub(Complex& c1,Complex&...
  • sum_TW
  • sum_TW
  • 2016-12-26 16:58:06
  • 2324

C++ 运算符重载讲解与经典实例

C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作。例如:  class complex  {   public:    complex(dou...
  • u013982161
  • u013982161
  • 2016-10-16 13:58:04
  • 3074

【C++面向对象】C++中运算符重载的两种方式

我们知道在C++中可以通过重载运算符的方式,使类实现类似于基本类型的运算符操作,如+、-、*、/等等。本文介绍这种重载运算符的两种方法。 我们先自定义一个类,来作为本次研究的对象: class I...
  • lzhui1987
  • lzhui1987
  • 2016-10-28 11:21:49
  • 4010

深入解析C++输入输出运算符重载

其实算不上什么深入解析,只不过最近看CArchive类的实现,其中一些写法完全颠覆了我对输入输出运算符重载的一些理解,所以在这里mark一下。        我们以输出运算符为例。首先输出运算符...
  • forever_wind
  • forever_wind
  • 2012-05-07 22:42:32
  • 9652

C++运算符重载的妙用

运算符重载(Operator overloading)是C++重要特性之一,本文通过列举标准库中的运算符重载实例,展示运算符重载在C++里的妙用。具体包括重载operator支持cin,cout输入输...
  • xusiwei1236
  • xusiwei1236
  • 2014-09-18 00:42:30
  • 2111

c++简单几种运算符重载

简单介绍几种运算符重载c++的类中有最基本的“六大少”: 构造函数,拷贝构造函数,赋值语句,析构函数,取地址运算符重载和const修饰的取地址运算符重载,接下来进行简要的说明(我们以Test类为主)...
  • angry_youth
  • angry_youth
  • 2017-03-20 18:55:10
  • 1110
收藏助手
不良信息举报
您举报文章:第三十七节 C++ 运算符重载 - 单目运算符
举报原因:
原因补充:

(最多只允许输入30个字)