Problem B: 向量的运算

这是山科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;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值