文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++中操作符的前置与后置有什么区别

2024-04-02 19:55

关注

一、值得思考的问题

下面的代码有没有区别?为什么?

二、意想不到的事实

三、++ 操作符重载

++ 操作符可以重载吗?如何区分前置++ 和后置++?

++ 操作符可以被重载

下面来看 ++ 操作符重载的示例:

#include <iostream>
using namespace std;
class Test
{
    int mValue;
public:
    Test(int i)
    {
        mValue = i;
    }
    int value()
    {
        return mValue;
    }
    Test& operator ++ ()
    {
        ++mValue;
        return *this;
    }
    Test operator ++ (int)
    {
        Test ret(mValue);
        mValue++;
        return ret;
    }
};
int main()
{
    Test t(0);
    Test m(0);
    Test tt = t++;
    cout << "tt = " << tt.value() << endl;
    cout << "t = " << t.value() << endl;
    Test mm = ++m;
    cout << "mm = " << mm.value() << endl;
    cout << "m = " << m.value() << endl;
    return 0;
}

输出结果如下:

前置++的效率高于后置++,因为前置的++没有生成额外的对象,意味着不需要过多的内存,也就是不需要在栈上生成对象。而后置的++需要创建栈空间上的对象,占用栈空间,并且需要调用构造函数,返回后需要调用析构函数。

四、真正的区别

对于基础类型的变量

对于类类型的对象

前面写过的复数类可以进一步完善了:

Complex.h:

#ifndef _COMPLEX_H_
#define _COMPLEX_H_
class Complex
{
    double a;
    double b;
public:
    Complex(double a = 0, double b = 0);
    double getA();
    double getB();
    double getModulus();
    Complex operator + (const Complex& c);
    Complex operator - (const Complex& c);
    Complex operator * (const Complex& c);
    Complex operator / (const Complex& c);
    bool operator == (const Complex& c);
    bool operator != (const Complex& c);
    Complex& operator = (const Complex& c);
    Complex& operator ++ ();
    Complex operator ++ (int);
};
#endif

Complex.cpp:

#include "Complex.h"
#include "math.h"
Complex::Complex(double a, double b)
{
    this->a = a;
    this->b = b;
}
double Complex::getA()
{
    return a;
}
double Complex::getB()
{
    return b;
}
double Complex::getModulus()
{
    return sqrt(a * a + b * b);
}
Complex Complex::operator + (const Complex& c)
{
    double na = a + c.a;
    double nb = b + c.b;
    Complex ret(na, nb);
    return ret;
}
Complex Complex::operator - (const Complex& c)
{
    double na = a - c.a;
    double nb = b - c.b;
    Complex ret(na, nb);
    return ret;
}
Complex Complex::operator * (const Complex& c)
{
    double na = a * c.a - b * c.b;
    double nb = a * c.b + b * c.a;
    Complex ret(na, nb);
    return ret;
}
Complex Complex::operator / (const Complex& c)
{
    double cm = c.a * c.a + c.b * c.b;
    double na = (a * c.a + b * c.b) / cm;
    double nb = (b * c.a - a * c.b) / cm;
    Complex ret(na, nb);
    return ret;
}
bool Complex::operator == (const Complex& c)
{
    return (a == c.a) && (b == c.b);
}
bool Complex::operator != (const Complex& c)
{
    return !(*this == c);
}
Complex& Complex::operator = (const Complex& c)
{
    if( this != &c )
    {
        a = c.a;
        b = c.b;
    }
    return *this;
}
Complex& Complex::operator ++ ()
{
    a = a + 1;
    b = b + 1;
    return *this;
}
Complex Complex::operator ++ (int)
{
    Complex ret(a, b);
    a = a + 1;
    b = b + 1;
    return ret;
}

test.cpp:

#include <iostream>
#include "Complex.h"
using namespace std;
int main()
{
    Complex a(0, 0);
    Complex b(0, 0);
    Complex aa = a++;
    Complex bb = ++b;
    cout << "aa的实部为: " << aa.getA() << endl;
    cout << "aa的实部为: " << aa.getB() << endl;
    cout << "bb的实部为: " << bb.getA() << endl;
    cout << "bb的实部为: " << bb.getB() << endl;
    return 0;
}

输出结果如下:

五、小结

到此这篇关于C++中操作符的前置与后置有什么区别的文章就介绍到这了,更多相关C++操作符内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯