OOP 向量加减(友元+拷贝构造)

目录

题目描述

样例

完整代码

注意要点


题目描述

定义一个CVector类如下:

class CVector

{

private:

    int *data; //存储n维向量

    int n;     //向量维数

public:

    CVector(int n1, int *a);

    CVector(CVector &c);

    ~CVector() { delete data; }

    void print();

    friend CVector Add(const CVector V1, const CVector V2);

    friend CVector Sub(const CVector V1, const CVector V2);

};

要求如下:

根据输入和输出实现CVector类的成员函数,并分别实现友元函数Add、Sub来实现两向量的相加和相减。

输入

第一行,输入测试次数t

每组测试数据格式如下:

向量维数n

第一个n维向量值

第二个n维向量值

输出

对每组测试数据,输出它们相加和相减后的结果

样例

输入样例

2
3
1 2 3
4 5 6
5
1 2 3 4 5
-1 2 4 6 10

输出样例

5 7 9
-3 -3 -3
0 4 7 10 15
2 0 -1 -2 -5

完整代码

#include<iostream>
#include<string.h>
#include<math.h>
#include<iomanip>
using namespace std;

class CVector
{
private:
    int* data; //存储n维向量
    int n;     //向量维数

public:
    CVector(int n1, int* a)
    {
        n = n1;
        data = new int[n1];
        for (int i = 0; i < n1; i++)
            data[i] = a[i];
    }

    CVector(const CVector& c)
    {
        n = c.n;
        data = new int[c.n];
        for (int i = 0; i < c.n; i++)
            data[i] = c.data[i];
    }

    ~CVector() { delete data; }

    void print()
    {
        for (int i = 0; i < n - 1; i++)
            cout << data[i] << ' ';
        cout << data[n - 1] << endl;
    }

    friend CVector Add(const CVector V1, const CVector V2);

    friend CVector Sub(const CVector V1, const CVector V2);
};

CVector Add(const CVector V1, const CVector V2)
{
    CVector V(V1);
    for (int i = 0; i < V.n; i++)
    {
        V.data[i] = V1.data[i] + V2.data[i];
    }
    return V;
}

CVector Sub(const CVector V1, const CVector V2)
{
    CVector V(V1);
    for (int i = 0; i < V.n; i++)
    {
        V.data[i] = V1.data[i] - V2.data[i];
    }
    return V;
}

int main()
{
    int t, n;
    cin >> t;
    while (t--)
    {
        cin >> n;
        int* x = new int[n];//n维向量
        for (int i = 0; i < n; i++)
            cin >> x[i];
        CVector v1(n, x);
        for (int i = 0; i < n; i++)
            cin >> x[i];
        CVector v2(n, x);
        Add(v1, v2).print();
        Sub(v1, v2).print();
        delete[]x;
    }
    return 0;
}

注意要点

此处加上const,否则在函数Add和Sub中对V的拷贝会报错

(除非题目要求,框架可以作简单修改)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值