【程序填空】三维点坐标平移(增量运算符重载)

278 阅读2分钟

​携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情

题目描述

定义一个三维点Point类,利用友元函数重载"++"和"--"运算符,并区分这两种运算符的前置和后置运算。

++表示x\y\z坐标都+1,--表示x\y\z坐标都-1

请完成以下程序填空

#include
using namespace std;

class Point;
Point operator -- (Point & );
Point operator -- (Point &, int);

class Point {
private:
int x, y, z;
public:
Point(int tx=0, int ty=0, int tz=0 )
{ x = tx, y = ty, z = tz; }
Point operator ++ ();
Point operator ++ (int);
friend Point operator -- (Point & );
friend Point operator -- (Point &, int);
void print();
};
//完成以下填空

int main()
{ int tx, ty, tz;
cin>>tx>>ty>>tz;
Point p0(tx, ty, tz); //原值保存在p0
Point p1, p2; //临时赋值进行增量运算

//第1行输出
p1 = p0;
p1++;;
p1.print();
//第2行输出
p1 = p0;
p2 = p1++;
p2.print();
//第3、4行输出,前置++
p1 = p0;
(++p1).print();
p1.print();
//第5、6行输出,后置--
p1 = p0;
p1--;
p1.print();
p0.print();
//第7、8行输出,前置--
p1 = p0;
(--p1).print();
p1.print();

return 0;
}

输入

只有一行输入,输入三个整数,表示点的x/y/z坐标

输出

由主函数自行输出

输入样例1

10 20 30

输出样例1

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

思路分析

主要是涉及到前增量和后增量的问题,重载这四个运算符的话,在增量运算符定义中加上整型形参就是后增量运算符。

对于前增量,我们直接让它++或--完了之后返回就可以了。

对于后增量,我们应该要创建一个临时变量先存储现值,然后做++或--,返回临时变量的值。

AC代码

Point operator--(Point&a,int)
{
	Point c = a;
	a.x--;
	a.y--;
	a.z--;
	return c;
}
Point operator--(Point& a)
{
	a.x--;
	a.y--;
	a.z--;
	return a;
}
Point Point::operator++(int)
{
	Point c = *this;
	x++;
	y++;
	z++;
	return c;
}
Point Point::operator++()
{
	x++;
	y++;
	z++;
	return *this;
}
void Point::print()
{
	cout << "x=" << x << " y=" << y << " z=" <<z<< endl;
}