C++matrix类

为什么输出的向量运算的结果跟v2都一样,哪里有潜在问题吗?


#include
using namespace std;
class  matrix{
    private:
    int *a;    
    int dim;
    public:
        matrix(){a=NULL;dim=0;}
        matrix(int d)
        {
            dim=d;
            a=new int[dim];
            cout<<"输入向量"<for(int i=0;i>a[i];
        }
        void print()
        {
            cout<<"(";
            for(int i=0;i-1;i++)
             cout<",";
            cout<-1]<<")"<matrix add(const matrix &v)
        {
            matrix temp;
            temp=v;
            temp.dim=v.dim;
            for(int i=0;ireturn temp;
        }
        matrix sub(const matrix &v)
        {
            matrix temp;
            temp=v;
            temp.dim=v.dim;
            for(int i=0;ireturn temp;
        }
        matrix mult(const matrix &v)
        {
            matrix temp;
            temp=v;
            temp.dim=v.dim;
            for(int i=0;ireturn temp;
        }
    
};
int main()
{
    int dim=4;
    //cout<<"请输入2*2阶矩阵的四个元素"; 
    matrix v1(dim),v2(dim);
    matrix Add=v1;matrix Sub=v1;matrix Mult=v1;
    Add=v1.add(v2);Sub=v1.sub(v2);Mult=v1.mult(v2);
    cout<<"v1=";v1.print();
    cout<<"v2=";v2.print();
    cout<<"v1+v2=";Add.print();
    cout<<"v1-v2=";Sub.print();
    cout<<"v1*v2=";Mult.print();
    return 0;
}

类的赋值默认都是浅拷贝,在Add函数中,temp=v; 也就是temp与v中a都是指向同一个内存地址,对temp的a元素赋值也就是对v的a中元素赋值。程序有以下不足

  1. matrix中存在堆,需要在析构中释放,你没写对应的析构函数;
  2. matrix中存在指针,需要定义相应的拷贝构造函数以及拷贝赋值函数,来手动处理指针的问题,是否要进行深拷贝。