C++ 三维坐标点的平移(运算符重载)

题目描述
定义一个三维点Point类,利用友元函数重载"++“和”–"运算符,并区分这两种运算符的前置和后置运算。 要求如下:
1.实现Point类;
在这里插入图片描述
2.编写main函数,初始化1个Point对象,将这个对象++或–后赋给另外一个对象,并输出计算后对象的坐标信息。 输入 第1行:输入三个int类型的值,分别为一个Point对象p1的x,y,z坐标。

输出
第1行:Point对象p1后置++之后的坐标信息输出。
第2行:Point对象p1后置++操作后赋给另外一个Point对象p2的坐标信息。
第3行开始,依次输出前置++,后置–,前置–运算的坐标信息,输出格式与后置++一样。
样例输入
10 20 30
样例输出
x=11 y=21 z=31
x=10 y=20 z=30
x=11 y=21 z=31
x=11 y=21 z=31
x=9 y=19 z=29
x=10 y=20 z=30
x=9 y=19 z=29
x=9 y=19 z=29
提示
原值是最初输入的数值

第1行是p1后置++后,再输出

第2行是p1恢复原值,接着p1后置++同时复制给p2,p2输出

第3、4行是p1恢复原值,p1前置++同时输出,然后p1再输出

第5、6行是p1恢复原值,p1后置–后,再输出,接着输出一次原值

第7、8行是p1恢复原值,p1前置–同时输出,然后p1再输出

#include<iostream>
#include<cmath>
#include <cstring>
using namespace std;
class Point{
	int x;
	int y;
	int z;
	public:
		Point(int X=0,int Y=0,int Z=0)
		{x=X;y=Y;z=Z;}
		Point(Point &a){
			x=a.x;
			y=a.y;
			z=a.z;
		}
		void set(int X,int Y,int Z){
			x=X;y=Y;z=Z;
		}
		friend Point& operator++(Point &);
		friend Point operator++(Point &,int);
		friend Point& operator--(Point &);
		friend Point operator--(Point &,int);
		void show(){
			cout<<"x="<<x<<' '<<"y="<<y<<' '<<"z="<<z<<endl;
		}
};
Point &operator++(Point &a){  //前置++,是先加加,在使用
	a.x++;
	a.y++;
	a.z++;
	return a;
}
Point operator++(Point &a,int){		//先使用,后加加
	Point temp(a);
	a.x++;
	a.y++;
	a.z++;
	return temp;
}
Point& operator--(Point &a){
	a.x--;
	a.y--;
	a.z--;
	return a;
}
Point operator--(Point &a,int){
	Point temp(a);
	a.x--;
	a.y--;
	a.z--;
	return temp;
}

int main(){
	int x,y,z;
	cin>>x>>y>>z;
	Point p1(x,y,z);
	Point p2;
	p1++;	
	p1.show(); 		//第1行是p1后置++后,再输出
	p1.set(x,y,z);
	p2=p1++;	
	p2.show();		//第2行是p1恢复原值,接着p1后置++同时复制给p2,p2输出
	p1.set(x,y,z);	
	(++p1).show();	
	p1.show();		//第3、4行是p1恢复原值,p1前置++同时输出,然后p1再输出
	p1.set(x,y,z);
	p1--;
	p1.show();
	p1.set(x,y,z);	
	p1.show();		//第5、6行是p1恢复原值,p1后置--后,再输出,接着输出一次原值
	(--p1).show();
	p1.show();		//第7、8行是p1恢复原值,p1前置--同时输出,然后p1再输出	
} 

前置++与后置++的区别

1、前置返回的是引用,后置返回的是临时对象。因为后置的时候原来的对象已经被++改变了。前置用引用则是为了不产生临时变量,可以减少内存的消耗。

2、后置的函数的声明里面参数列表中比前置多了一个int,这里的int其实是作为区分前后置的标志,在函数体里面并没有直接地用到。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值