关于拷贝构造函数的问题
这个是一个关于矩阵类的程序
<br>头文件:
<br>class Matrix
<br>{
<br>private:
<br> int rows;
<br> int cols;
<br> int **p;
<br>public:
<br> Matrix( int = 0 , int = 0 );
<br> Matrix(Matrix & m);
<br> ~Matrix();
<br> int getrows();
<br> int getcols();
<br> int getelem( int , int );
<br> void setelem( int , int , int );
<br> void add(Matrix &);
<br> void subtract(Matrix &);
<br> bool equals(Matrix &);
<br>};
<br>类的实现:
<br>#include<iostream>
<br>#include"Matrix.h"
<br>using namespace std;
<br>Matrix::Matrix(int a,int b):rows(a),cols(b)
<br>{
<br> p=new int*[a];
<br> for(int i=0;i<a;i++)
<br> p=new int;
<br> for(i=0;i<a;i++)
<br> for(int j=0;j<b;j++)
<br> p[j]=0;
<br>}
<br>Matrix::Matrix(Matrix & m)
<br>{
<br> p=new int *[m.getrows()];
<br> for(int i=0;i<m.getrows();i++)
<br> p=new int[m.getcols()];
<br> for(i=0;i<m.getrows();i++)
<br> for(int j=0;j<m.getcols();j++)
<br> p[j]=m.getelem(i,j);
<br>}
<br>
<br>Matrix::~Matrix()
<br>{
<br> //关于动态生成二维数组所占用的空间如何释放查了但是还是没有搞明白
<br>}
<br>int Matrix::getrows()
<br>{
<br> return rows;
<br>}
<br>int Matrix::getcols()
<br>{
<br> return cols;
<br>}
<br>int Matrix::getelem(int a,int b)
<br>{
<br> return p[a];
<br>}
<br>void Matrix::setelem(int a,int b,int num)
<br>{
<br> p[a]=num;
<br>}
<br>void Matrix::add(Matrix & m)
<br>{
<br> if(rows==m.getrows()&&cols==m.getcols())
<br> {
<br> for(int i=0;i<rows;i++)
<br> for(int j=0;j<cols;j++)
<br> p[j]+=m.getelem(i,j);
<br> }
<br> else
<br> cout<<"the dimension of two matrix is different"<<endl;
<br>}
<br>void Matrix::subtract(Matrix & m)
<br>{
<br> if(rows==m.getrows()&&cols==m.getcols())
<br> {
<br> for(int i=0;i<rows;i++)
<br> for(int j=0;j<cols;j++)
<br> p[j]-=m.getelem(i,j);
<br> }
<br> else
<br> cout<<"the dimension of two matrix is different"<<endl;
<br>}
<br>bool Matrix::equals(Matrix & m)
<br>{
<br> if(rows==m.getrows()&&cols==m.getcols())
<br> {
<br> for(int i=0;i<rows;i++)
<br> for(int j=0;j<cols;j++)
<br> if(p[j]==m.getelem(i,j))
<br> return true;
<br> else return false;
<br> }
<br> else
<br> return false;
<br>}
<br>
<br>main函数:
<br>#include <iostream>
<br>#include "Matrix.h"
<br>using namespace std;
<br>int main() {
<br>Matrix a(2, 3);
<br>cout << "Matrix a is " << a.getrows() << " rows tall." << endl;
<br>cout << "Matrix a is " << a.getcols() << " columns wide." << endl;
<br>for(int r = 0; r < a.getrows(); r++) {
<br>for(int c = 0; c < a.getcols(); c++) {
<br>cout << "Element (" << r << ", " << c << ") = " <<
<br>a.getelem(r,c) << endl;
<br>}
<br>}
<br>a.setelem(1, 2, -5280);
<br>a.setelem(0, 1, 123);
<br>Matrix b = a;
<br>a.setelem(1, 2, 555);
<br>cout << "(1,2) of a = " << a.getelem(1,2) << " [should be 555]" <<endl;
<br>cout << "(1,2) of b = " << b.getelem(1,2) << " [should be -5280]"<< endl;
<br>Matrix c = a;
<br>c.add(b);
<br>
<br>Matrix d = c;//当这行进入拷贝构造函数申请内存的时候就申请不出来了而Matrix c = a;这行却可以,不知道为什么
<br>
<br>d.subtract(a);
<br>if (d.equals(b)) {
<br>cout << "Yay! d = b!" << endl;
<br>} else {
<br>cout << "Uh-oh! Something went wrong; d isnt b!" << endl;
<br>}
<br>
<br>Matrix e;
<br>cout << "0x0 matrix e is " << e.getrows() << " by " << e.getcols()<< endl;
<br>if (!e.equals(d)) {
<br>cout << "e and d are indeed different!" << endl;
<br>} else {
<br>cout << "Oh well, back to the drawing board...." << endl;
<br>}
<br>return 0;
<br>}

- 这是一篇来自百度知道的问题
|