• 重载++操作符的一些感悟


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

    这一篇写的是关于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)前置要比后置效率高:后置会引入一个临时对象,同时调用前置的重载实现。

  • 相关阅读:
    动态规划
    平衡二叉树与自平衡二叉树(红黑树)的区别
    算法可视化网站
    字符串查找算法总结(暴力匹配、KMP 算法、Boyer-Moore 算法和 Sunday 算法)
    既然红黑树那么好,为啥hashmap不直接采用红黑树,而是当大于8个的时候才转换红黑树?
    平衡二叉树(AVL树)
    经典的hash函数
    正则表达式之基本原理
    正则表达式只有主语和状语
    模式匹配算法:扫描+特征比较
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3301712.html
Copyright © 2020-2023  润新知