ex5.34——重载“++,--,+”三个操作符

**(由于不好区分,以后标题以题目号开头,便于查找。)****重点内容**
本题是重载操作符的题目,不复杂,且重载前置的++,--。后置的区别仅仅是形参列表中需要添加int以示区分。
需要知道加号的重载的几种情形。(看书都有)
void operator++()           //前置++
{...;}      
void operator++(int)        //后置++
{...;}

同样三个文件:three_d.h,threed.cpp,main.cpp
three_d.h:定义类Three_D,三维坐标点,有x,y,z三个坐标属性。

#pragma once
#include <iostream>
//重载+,++,--,其中后两者为前置

class Three_D {
public:
    Three_D(int i, int j, int k) {//构造函数
        x = i, y = j, z = k;
    }
    Three_D() {//构造原点
        x = 0, y = 0, z = 0;
    }
    void Get(int& i, int& j, int& k) {//获得点对象的三个坐标值
        i = x, j = y, k = z;
    }
    Three_D& operator++() {//重载前置++
        ++x, ++y, ++z;
        return *this;
    }
    Three_D& operator--() {//重载前置--
        --x, --y, --z;
        return *this;
    }
    Three_D& operator+(Three_D& const p1) {
    //重载+,由于会涉及连加情况且未保证不会由于加号
    //修改到对象原有属性,故新增一个对象来进行操作。
    //未选择时机释放d3空间,也就是没有delete。
    //在VC中产生的anachronism used错误一般都是由于在栈区的对象用作引用返回。
    //当然这里也可以直接返回对象的复制,性能上面谁更好呢?
        Three_D *d3 = new Three_D;   //这里常见的错误就是直接在栈区申请对象,应该在堆区new才能保证对象返回不受影响,否则退出本函数时对象已被自动释放。
        d3->x = x + p1.x;    //命名不规范
        d3->y = y + p1.y;
        d3->z = z + p1.z;
        return *d3;
    }
    void print()const;    //直接打印对象三个坐标值
private:
    int x, y, z;
};

three_d.cpp:实现文件,只包含一个print的实现

#include "threed.h"
using std::cout;
using std::endl;

void Three_D::print()const {
    cout << "(" << x << "," << y << ","
        << z << ")" << endl;
}

main.cpp:简单验证一下程序应有功能

#include "threed.h"
using std::cout;
using std::endl;
//本题是重载++,--,+操作符
int main(void) {
    Three_D d1(1, 2, 3);
    Three_D d2;
    d1.print();
    d2.print();
    cout << "d1 + d2" << endl;
    (d1 + d2).print();
    cout << "d1" << endl;
    d1.print();
    cout << "d2" << endl;
    d2.print();
    cout << "++d1" << endl;
    ++d1;
    d1.print();
    cout << "++d2" << endl;
    ++d2;
    d2.print();

    return 0;
}

以下是main函数中代码产生的输出:
main函数产生的输出:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值