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
    评论
以下是三维坐标类Point的定义和运算符重载函数的实现: ```cpp #include <iostream> using namespace std; class Point { public: double x, y, z; Point() : x(0), y(0), z(0) {} Point(double _x, double _y, double _z) : x(_x), y(_y), z(_z) {} Point operator+(const Point& p) const { return Point(x + p.x, y + p.y, z + p.z); } Point operator-() const { return Point(-x, -y, -z); } bool operator==(const Point& p) const { return x == p.x && y == p.y && z == p.z; } Point& operator+=(const Point& p) { x += p.x; y += p.y; z += p.z; return *this; } friend Point operator-(const Point& p1, const Point& p2) { return Point(p1.x - p2.x, p1.y - p2.y, p1.z - p2.z); } friend istream& operator>>(istream& in, Point& p) { in >> p.x >> p.y >> p.z; return in; } friend ostream& operator<<(ostream& out, const Point& p) { out << "(" << p.x << ", " << p.y << ", " << p.z << ")"; return out; } }; int main() { Point p1(1, 2, 3), p2(2, 3, 4); cout << p1 << " + " << p2 << " = " << p1 + p2 << endl; Point p3(1, 2, 3); cout << "p3 = " << p3 << ", -p3 = " << -p3 << endl; Point p4(1, 2, 3), p5(1, 2, 3), p6(2, 3, 4); cout << "p4 == p5: " << (p4 == p5 ? "true" : "false") << endl; cout << "p4 == p6: " << (p4 == p6 ? "true" : "false") << endl; Point p7(1, 2, 3), p8(2, 3, 4); p7 += p8; cout << "p7 += " << p8 << ", p7 = " << p7 << endl; Point p9(2, 3, 4), p10(1, 2, 3); cout << p9 << " - " << p10 << " = " << p9 - p10 << endl; Point p11; cout << "Enter a point: "; cin >> p11; cout << "You entered " << p11 << endl; return 0; } ``` 运行结果如下: ``` (1, 2, 3) + (2, 3, 4) = (3, 5, 7) p3 = (1, 2, 3), -p3 = (-1, -2, -3) p4 == p5: true p4 == p6: false p7 += (2, 3, 4), p7 = (3, 5, 7) (2, 3, 4) - (1, 2, 3) = (1, 1, 1) Enter a point: 1 2 3 You entered (1, 2, 3) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值