第九周项目四 向量的类

来源:互联网 发布:网络行为控制 编辑:程序博客网 时间:2024/05/17 01:27

问题及代码

ALL rights reserved.                       *文件名称: 初学对象9                  作者:李长鸿                    *完成时间:2015.5.13              *问题描述: 向量问题                */#include <iostream>using namespace std;class MyVector          //定义向量类{public:    MyVector(int m):num(m)    {        Array=new int[num];        int i;    //构造函数,共有m个元素的向量,元素值预置为0        Array[num]=0;    }    MyVector(const MyVector &d)    {        int i;        num=d.num;        Array=new int[num];        Array[num]= {0};    }    //复制构造函数    ~MyVector()    {        delete []Array;    } //析构函数:释放动态数组所占用的存储空间    friend istream &operator>>(istream &input, MyVector &d);    friend ostream &operator<<(ostream &output, const MyVector &d);    friend MyVector operator+(const MyVector &d1,const MyVector &d2);//向量相加,对应位置上的元素相加    friend MyVector operator-(const MyVector &d1,const MyVector &d2);//向量相减,对应位置上的元素相减    bool operator==(const MyVector &d);//判断两个矩阵是否相等,即对应位置上的所有元素是否相等private:    int *Array;       //Array 为动态数组指针,指向向量占用内存的起始地址    int num;          //向量中元素个数};istream &operator>>(istream&input,MyVector &d){    cout<<"有"<<d.num<<"个元素的向量"<<endl;    int i;    for(i=0; i<d.num; i++)        input>>d.Array[i];    return input;}ostream&operator<<(ostream&output,const MyVector&d){    int i;    for(i=0; i<d.num; i++)output<<d.Array[i]<<"  ";    output<<endl;    return output;}MyVector operator+(const MyVector&d1,const MyVector&d2){<span style="color:#ff0000;">MyVector M=d1;    if(d1.num==d2.num)</span>    {        int  j;        for(j=0; j<d1.num; j++)        {            M.Array[j]=d1.Array[j]+d2.Array[j];        }        return M;    }    else cout<<"向量个数不一致,无法计算。";}MyVector operator-(const MyVector&d1,const MyVector&d2){<span style="color:#ff0000;">MyVector M=d1;    if(d1.num==d2.num)    {</span>        int j;        for(j=0; j<d1.num; j++)        {            M.Array[j]=d1.Array[j]-d2.Array[j];        }        return M;    }    else cout<<"向量个数不一致,无法计算。";}bool MyVector::operator==(const MyVector &d){    int j;    for(j=0; j<num; j++)        if(Array[j]!=d.Array[j])return 0;    return 1;}int main(){    MyVector d1(5),d2(5);    cout<<"输入d1——";    cin>>d1;    cout<<"输入d2——";    cin>>d2;    cout<<"d1="<<d1<<endl;    cout<<"d2="<<d2<<endl;    cout<<"d1+d2="<<d1+d2<<endl;    cout<<"d1-d2="<<d1-d2<<endl;    cout<<"d1"<<((d1==d2)?"==":"!=")<<"d2"<<endl;    cout<<endl;    return 0;}


  

总结:

MyVector operator+(const MyVector&d1,const MyVector&d2)
{
    if(d1.num==d2.num)
    {
        MyVector M=d1;
        int  j;

        for(j=0; j<d1.num; j++)
        {
            M.Array[j]=d1.Array[j]+d2.Array[j];
        }
        return M;
    }
    else cout<<"向量个数不一致,无法计算。";

}

MyVector operator-(const MyVector&d1,const MyVector&d2)
{
    if(d1.num==d2.num)
    {
        MyVector M=d1;
        int j;
        for(j=0; j<d1.num; j++)
        {
            M.Array[j]=d1.Array[j]-d2.Array[j];
        }
        return M;
    }
    else cout<<"向量个数不一致,无法计算。";

}

按理说不应该啊,这个位置相调换了不应该会错啊。出这么个结果。。。。。

      读题会错意,认为向量个数可能不一样,就考虑了谁多谁少,差个数的那部分值为0再相加的问题。比较麻烦。

0 0