您的位置:首页 > 编程语言

++操作符重载代码分析

2017-04-27 16:40 218 查看

之前在你必须知道的495个C语言问题,学习体会三中提到了C++的自加++重载,以此说明前置++ 和后置++的效率问题,现在这这篇文中给出 代码来分析下:

#include <iostream>
using namespace std;

class Integer
{
public:
Integer(long x):m_data(x){};
Integer(){};
~Integer(){};
Integer& operator++();
Integer operator++(int);
void printIn();
private:
long m_data;

};
//前置++
Integer& Integer::operator++()
{
cout << "prefix ++ opreator called"<<endl;
m_data += 1;
return *this;
}

//后置++,重载的区别在于其参数增加一个int类型的哑元,这是C++规定的,我就照做了
Integer Integer::operator++(int)
{
cout << "suffix ++ operator called"<< endl;
Integer temp = *this;
m_data ++;
return temp;
}

void Integer::printIn()
{
cout << "integer is "<< this->m_data << endl;
}
int main(int argc,char *argv[])
{
Integer a = 90;
Integer b;
Integer c;

c = ++a;
c.printIn();

b = a++;
b.printIn();
return 0;
}

输出如下:

g++ plusop.cpp  && ./a.out

prefix ++ opreator called
integer is 91
suffix ++ operator called
integer is 91

总结下:通过以上++的重载可以看到,前置++的重载 是直接返回的*this引用,而后置++的重载 需要一个类的临时变量,这涉及到类的构造与析构,消耗了更过的资源和时间。

因此,在大型代码中,建议使用前置++来自增一个类或者变量是 最佳的选择。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: