一.问题描述

设计一个描述三维坐标的向量类vector3D,成员如下:

数据成员:

  • 三个坐标x,y,z,float类型,私有访问属性

公有函数成员:

  • 三个参数均有默认值的构造函数,默认值为0,0,0;
  • 重载输入输出运算符,输出格式为(x, y, z);
  • 重载加法+、减法-、数乘*(乘数在前,乘数为float类型)这三个运算符;

 

在主函数中定义两个vector3D类对象v1,v2,均不带参数,之后输入数字1或2选择为v1输入赋值,还是为v1和v2输入赋值,对v1和v2进行加、减运算,对v1进行数乘运算,乘数由用户输入,最后输出三种运算结果。

二.设计思路

按照题目所述写出对应代码即可

三.流程图

四.伪代码 

1

五.代码实现 

#include<iostream>
using namespace std;
class vector3D {
protected:
	float x, y, z;
public:
	vector3D() :x(0), y(0), z(0) {}

	vector3D operator+(vector3D& a) {
		vector3D b;
		b.x = x + a.x;
		b.y = y + a.y;
		b.z = z + a.z;
		return b;
	}
	vector3D operator-(vector3D& a) {
		vector3D b;
		b.x = x - a.x;
		b.y = y - a.y;
		b.z = z - a.z;
		return b;
	}
	friend vector3D operator*(int s, vector3D& a) {
		vector3D b;
		b.x = s * a.x;
		b.y = s * a.y;
		b.z = s * a.z;
		return b;
	}
	friend istream& operator>>(istream& in, vector3D& a) {
		in >> a.x >> a.y >> a.z;
		return in;
	}
	friend ostream& operator<<(ostream& out, vector3D& a) {
		out << '(' << a.x << ',' << a.y << ',' << a.z << ')' ;
		return out;
	}

};
int main() {
	vector3D v1, v2, v3;
	int n,s;
	cin >> n;
	if (n == 1) {
		cin >> v1;
		cin >> s;
		cout << v1 << endl;
		cout << v1 << endl;
		v3 = s * v1;
		cout << v3 << endl;
	}
	if (n == 2) {
		cin >> v1 >> v2;
		cin >> s;
		v3 = v1 + v2;
		cout << v3 << endl;
		v3 = v1 - v2;
		cout << v3 << endl;
		v3 = s*v1;
		cout << v3 << endl;
	}
	
}

 

posted on 2023-04-21 22:21  leapss  阅读(36)  评论(0)    收藏  举报