C++第9周(春)项目4 - 一维向量类

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接

【项目4】建立一个向量类MyVector,声明如下,请完成类的定义

class MyVector          //定义向量类
{
public:
    MyVector(int m);    //构造函数,共有m个元素的向量,元素值预置为0
    MyVector(const MyVector &v);  //复制构造函数
    ~MyVector(); //析构函数:释放动态数组所占用的存储空间
    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;          //向量中元素个数
};
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;
    return 0;
}

参考解答:

#include <iostream>
using namespace std;
class MyVector          //定义向量类
{
public:
    MyVector(int m);    //构造函数,共有m个元素的向量,元素值预置为0
    MyVector(const MyVector &v);  //复制构造函数
    ~MyVector(); //析构函数:释放动态数组所占用的存储空间
    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;          //向量中元素个数
};

MyVector::MyVector(int m)
{
    num = m;
    Array = new int[num];
    for(int i=0; i<num; ++i)
        Array[i]=0;
}

MyVector::MyVector(const MyVector &d)
{
    num=d.num;
    if(Array!=NULL) delete []Array;
    Array = new int[num];
    for(int i=0; i<num; ++i)
        Array[i]=d.Array[i];
}

MyVector::~MyVector() //析构函数:用于释放动态数组所占用的存储空间
{
    delete [] Array;
}

istream &operator>>(istream &input, MyVector &d)
{
    cout<<d.num<<"个元素的向量: ";
    for(int i=0; i<d.num; ++i)
        cin>>d.Array[i];
    return input;
}

ostream &operator<<(ostream &output, const MyVector &d)
{
    cout<<"(";
    if(d.num>0)
        cout<<d.Array[0];
    for(int i=1; i<d.num; ++i)
        cout<<", "<<d.Array[i];
    cout<<")";
    return output;
}

MyVector operator+(const MyVector &d1,const MyVector &d2)
{
    //在此可以先判断d1和d2的元素数是否相同,如果不相同可以报错退出,不做运算。本参考解答忽略了这一前提
    MyVector d(d1.num);
    for(int i=0; i<d1.num; ++i)
    {
        d.Array[i]=d1.Array[i]+d2.Array[i];
    }
    return d;
}

MyVector operator-(const MyVector &d1,const MyVector &d2)
{
    MyVector d(d1.num);
    for(int i=0; i<d1.num; ++i)
    {
        d.Array[i]=d1.Array[i]-d2.Array[i];
    }
    return d;
}

bool MyVector::operator ==(const MyVector &d)//判断两个矩阵是否相等,即对应位置上的所有元素是否相等
{
    if(num!=d.num) return false;
    bool eq = true;
    for(int i=0; i<num; ++i)
    {
        if (Array[i]!=d.Array[i])
        {
            eq=false;
            break;
        }
        if (!eq) break;
    }
    return eq;
}

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;
    return 0;
}
==================== 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==|
|== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
|== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|
===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====
时间: 2024-09-15 17:45:46

C++第9周(春)项目4 - 一维向量类的相关文章

C++第5周(春)项目4 指向学生类的指针

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目4-指向学生类的指针] 设计一个学生类Student,数据成员包括学号(num)和成绩(score),成员函数根据需要自行设计(建议配备需要的set.get函数,以及必要的输入或输出,给出的代码中也可以找到需要成员函数的线索).在main函数中,要做到: 建立一个对象数组,通过初始化,设置5个学生的数据,要求: 用指针指向数组首元素,输出

C++第7周(春)项目5 复数模板类(加使用友元函数拓展)

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目5-复数模板类] 阅读P314的例10.1.该例实现了一个复数类,但是美中不足的是,复数类的实部和虚部都固定只能是double型的.可以通过模板类的技术手段,设计Complex,使实部和虚部的类型为定义对象时用的实际类型. (1)要求类成员函数在类外定义. (2)在此基础上,再实现减法.乘法和除法 你可以使用的main()函数如下: in

C++第8周(春)项目4 扩充String类

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目4-扩充String类]在P324基础上,在String类中增加一个数据成员len表示字符串中字符个数,然后再构造String类的加.减运算.其中,s1 + s2将两个字符串的连接起来:s1 - s2是将s1的尾部空格和s2的前导空格去除后的连接. 参考解答: #include <iostream> #include <Cstri

C++第3周(春)项目4 长方柱类

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目4 - 长方柱类](改自教材P262第6题)仿照你阅读过的程序,编写基于对象的程序,求3个长方柱(Bulk)的体积.数据成员包括长(length).宽(width).高(heigth).体积,要求设计成员函数实现下面的功能:(1)由键盘输入3个长方柱的长.宽.高:(2)计算长方柱的体积(volume)和表面积(areas):(3)输出这3

C++第8周(春)项目1 实现复数类中的运算符重载

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目1]实现复数类中的运算符重载(1)请用类的成员函数,定义复数类重载运算符+.-.*./,使之能用于复数的加减乘除 class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r; imag=i;} Complex operator+(C

C++第12周(春)项目 4 - 日期时间类

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目4]日期时间类 定义一个日期类Date,数据成员包括年.月.日,SetDate(int y,int m,int d)和PrintDate()函数分别用于设置日期和显示日期:再定义一个时间类Time,数据成员包括时.分.秒,SetTime(int h,int m,int s)和PrintTime()函数分别用于设置时间和显示时间,在此基础上

C++第8周(春)项目2 实现Time类中的运算符重载

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目2-Time类中的运算符重载]实现Time类中的运算符重载 class CTime { private: unsigned short int hour; // 时 unsigned short int minute; // 分 unsigned short int second; // 秒 public: CTime(int h=0,i

2013级C++第8周(春)项目——运算符重载

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目1]实现复数类中的运算符重载(1)请用类的成员函数,定义复数类重载运算符+.-.*./,使之能用于复数的加减乘除 class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r; imag=i;} Complex operator+(C

2013级C++第9周(春)项目——运算符重载(二)

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [程序阅读]阅读程序"简单C++学生信息管理系统",找出其中出现构造函数.友元函数.运算符重载.静态数成员语法现象出现的位置,仔细体会其用法,在以后的设计中能够灵活应用有关方法和技巧 项目1-3直接复制第8周的代码,加入要求的运算符重载定义后,作为第9周的任务另外发博文.[项目1]在第8周项目1基础上(1)再定义一目运算符 -,-c相