11-3

C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比较这两种克隆方式的异同。

#include<cmath>

#include<iostream>

using namespace std;

 

class Vector{

private:

    double *array =new double[4];

    double length;

public:

    Vector(double arr[4])

    {

        this->array[0] = arr[0];

        this->array[1] = arr[1];  

        this->array[2] = arr[2];

        this->array[3] = arr[3];

        this->length = sqrt(((arr[0] - arr[1])*(arr[0] - arr[1])) + ((arr[2] - arr[3])*(arr[2] - arr[3])));

    }

    ~Vector()

    {

        delete[]array;

        this->length = 0;

    }

    Vector* clone()

    {

        return new Vector(*this);

    }

 

    Vector(const Vector& vector)

    {

        //浅克隆

        this->array = vector.array;

        this->length = vector.length;

 

    }

    void show()

    {

        cout << "向量长度:" << this->length << endl;

    }

};

int main()

{

    double s[4] = { 1, 2, 3, 4 };

    Vector* v1 = new Vector(s);

    Vector* v2 = v1->clone();

    v1->show();

    v2->show();

    return 0;

}

C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比较这两种克隆方式的异同。

实验要求:

1.画出对应的类图;

2.提交源代码(用C++完成);

3.注意编程规范。

 

 

 

#include<cmath>

#include<iostream>

using namespace std;

 

class Vector{

private:

    double *array =new double[4];

    double length;

public:

    Vector(double arr[4])

    {

        this->array[0] = arr[0];

        this->array[1] = arr[1];  

        this->array[2] = arr[2];

        this->array[3] = arr[3];

        this->length = sqrt(((arr[0] - arr[1])*(arr[0] - arr[1])) + ((arr[2] - arr[3])*(arr[2] - arr[3])));

    }

    ~Vector()

    {

        delete[]array;

        this->length = 0;

    }

    Vector* clone()

    {

        return new Vector(*this);

    }

 

    Vector(const Vector& vector)

    {

        //浅克隆

        this->array = vector.array;

        this->length = vector.length;

 

    }

    void show()

    {

        cout << "向量长度:" << this->length << endl;

    }

};

int main()

{

    double s[4] = { 1, 2, 3, 4 };

    Vector* v1 = new Vector(s);

    Vector* v2 = v1->clone();

    v1->show();

    v2->show();

    return 0;

}

posted @ 2023-11-03 18:03  Y丶FZ  阅读(7)  评论(0)    收藏  举报