这是山科oj的实验题。
我的代码很差,但是我想分享的部分是 << 重载的那部分。感觉稍微简洁一点,
时间比较短,所以不多做解释。
如果有人不懂欢迎在评论区讨论
大佬勿喷,欢迎指正。
#include <iostream>
using namespace std;
class Vector
{
public:
Vector() :x(0), y(0), z(0) {}
Vector(int xx, int yy, int zz) :x(xx), y(yy), z(zz) {}
friend istream& operator >> (istream& is, Vector& t) {
is >> t.x >> t.y >> t.z;
return is;
}
friend ostream& operator << (ostream& os, Vector& t) { // 在这里
if (t.x == 0 && t.y == 0 && t.z == 0) cout << 0;
else {
if(t.x != 0){
cout << t.x << 'i';
}
if(t.y != 0) {
if (t.x != 0 && t.y > 0)
cout << '+';
cout << t.y << 'j';
}
if (t.z != 0) {
if ((t.x != 0 || t.y != 0) && t.z > 0)
cout << '+';
cout << t.z << 'k';
}
}
return os;
}
friend Vector operator + (const Vector& t1, const Vector& t2)
{
return Vector(t1.x + t2.x, t1.y + t2.y, t1.z + t2.z);
}
friend Vector operator - (const Vector& t1, const Vector& t2)
{
return Vector(t1.x - t2.x, t1.y - t2.y, t1.z - t2.z);
}
friend Vector operator * (const Vector& t1, const Vector& t2)
{
return Vector(t1.y*t2.z - t2.y*t1.z, t2.x*t1.z - t1.x*t2.z, t1.x*t2.y - t2.x*t1.y);
}
friend Vector operator * (const Vector& t1, int n)
{
return Vector(t1.x * n, t1.y * n, t1.z * n);
}
Vector operator = (const Vector& t) {
x = t.x; y = t.y; z = t.z;
return *this;
}
private:
int x, y, z;
};
int main()
{
Vector vec1, vec2, vec3;
int cases, n;
cin >> cases;
cout << "vect+vec2\tn*vec1\tvec1*vec2\n";
for (int i = 0; i < cases; i++)
{
cin >> vec1 >> vec2 >> n;
vec3 = vec1 + vec2;
cout << vec3 << "\t";
vec3 = vec1 * n;
cout << vec3 << "\t";
vec3 = vec1 * vec2;
cout << vec3 << endl;
}
return 0;
}