zoukankan      html  css  js  c++  java
  • 重载++操作符的一些感悟

    好久没总结东西了。在过一个多星期就可以结束实习了。刚好这段时间有空开始整理以前的学习笔记。哈哈,就当复习吧。

    这一篇写的是关于C++重载操作符,代码比较简单,以++为例,其他也是相通的。

    #include <iostream>
    using namespace std;
    class DefType{
    	//ostream是一个类,平常用的cout就是它的实例。这里我们重载一下<<运算符
    	//括号里面的两个参数os跟t,分别是<<左右两边的操作数
    	//如果os不是引用类型会出现什么情况呢?为什么?
    	friend ostream& operator<<(ostream& os, const DefType& t)
    	{
    		return os<<t.m_iVale<<endl;
    	}
    	int m_iVale;
    public:
    	//显式定义构造函数
    	explicit DefType(int i = 0):m_iVale(i){}
    	//prefix++,前缀、前置
    	//注意返回的类型是引用
    	DefType& operator++()
    	{
    		++(this->m_iVale);
    		return *this;
    	}
    	//postfix++,后缀、后置
    	//注意返回的类型是带const,而且参数类型必须是int,否则会出现下面错误:
    	//error C2807: the second formal parameter to postfix 'operator ++' must be 'int'
    	const DefType operator++(int)
    	{
    		DefType tmp = (*this);
    		//代码复用,调用前置操作符
    		++(*this);
    		return tmp;
    	}
    };
    int main()
    {
    	DefType dt(100);
    	cout<<dt++;//自动调用后置操作符,输出的是100
    	cout<<++dt;//自动调用前置操作符,输出的是102
    	cout<<dt.operator++();//手动调用前置操作符,输出的是103
    	cout<<dt.operator++(0);//手动调用后置操作符,输出的是103
    	return 0;
    }

    小结:1)前置跟后置的返回类型不一样的;

               2)后置会带一个参数类型int,但并不会被用到,如果不加编译器会提示C2807错误;

               3)前置要比后置效率高:后置会引入一个临时对象,同时调用前置的重载实现。

  • 相关阅读:
    修改 Mac 默认 PHP 运行环境,给 MAMP 配置全局 Composer
    修改 Mac 默认 PHP 运行环境,给 MAMP 配置全局 Composer
    Intellij Idea/Webstorm/Phpstorm 的高效快捷键
    Intellij Idea/Webstorm/Phpstorm 的高效快捷键
    管理工具推荐
    mongo find
    redis 工具
    Redis Quick Start [熟练版]
    Redis cluster
    redis cluster 使用中出现的问题
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3301712.html
Copyright © 2011-2022 走看看