CNET中国旗舰网站

ZDNet China | CNET科技资讯网 | 政府采购 | 行业网站联盟




 
标题: [问答] 关于拷贝构造函数的问题
CNET开发专家团
专家组
Rank: 10Rank: 10Rank: 10



UID 259939
精华 1
积分 53
帖子 4
威望 -2
ZD币 16 元
阅读权限 255
注册 2007-11-9
状态 离线
  楼主
发表于 2008-3-19 15:02  资料  个人空间  短消息  加为好友 
开发者在线

关于拷贝构造函数的问题

这个是一个关于矩阵类的程序
<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&lt;iostream&gt;
<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&lt;a;i++)
<br>  p=new int;
<br> for(i=0;i&lt;a;i++)
<br>  for(int j=0;j&lt;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&lt;m.getrows();i++)
<br>  p=new int[m.getcols()];
<br> for(i=0;i&lt;m.getrows();i++)
<br>  for(int j=0;j&lt;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&lt;rows;i++)
<br>   for(int j=0;j&lt;cols;j++)
<br>    p[j]+=m.getelem(i,j);
<br> }
<br> else
<br>  cout&lt;&lt;"the dimension of two matrix is different"&lt;&lt;endl;
<br>}
<br>void Matrix::subtract(Matrix & m)
<br>{
<br> if(rows==m.getrows()&&cols==m.getcols())
<br> {
<br>  for(int i=0;i&lt;rows;i++)
<br>   for(int j=0;j&lt;cols;j++)
<br>    p[j]-=m.getelem(i,j);
<br> }
<br> else
<br>  cout&lt;&lt;"the dimension of two matrix is different"&lt;&lt;endl;
<br>}
<br>bool Matrix::equals(Matrix & m)
<br>{
<br> if(rows==m.getrows()&&cols==m.getcols())
<br> {
<br>  for(int i=0;i&lt;rows;i++)
<br>   for(int j=0;j&lt;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 &lt;iostream&gt;
<br>#include "Matrix.h"
<br>using namespace std;
<br>int main() {
<br>Matrix a(2, 3);
<br>cout &lt;&lt; "Matrix a is " &lt;&lt; a.getrows() &lt;&lt; " rows tall." &lt;&lt; endl;
<br>cout &lt;&lt; "Matrix a is " &lt;&lt; a.getcols() &lt;&lt; " columns wide." &lt;&lt; endl;
<br>for(int r = 0; r &lt; a.getrows(); r++) {
<br>for(int c = 0; c &lt; a.getcols(); c++) {
<br>cout &lt;&lt; "Element (" &lt;&lt; r &lt;&lt; ", " &lt;&lt; c &lt;&lt; ") = " &lt;&lt;
<br>a.getelem(r,c) &lt;&lt; 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 &lt;&lt; "(1,2) of a = " &lt;&lt; a.getelem(1,2) &lt;&lt; " [should be 555]" &lt;&lt;endl;
<br>cout &lt;&lt; "(1,2) of b = " &lt;&lt; b.getelem(1,2) &lt;&lt; " [should be -5280]"&lt;&lt; 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 &lt;&lt; "Yay! d = b!" &lt;&lt; endl;
<br>} else {
<br>cout &lt;&lt; "Uh-oh! Something went wrong; d isnt b!" &lt;&lt; endl;
<br>}
<br>
<br>Matrix e;
<br>cout &lt;&lt; "0x0 matrix e is " &lt;&lt; e.getrows() &lt;&lt; " by " &lt;&lt; e.getcols()&lt;&lt; endl;
<br>if (!e.equals(d)) {
<br>cout &lt;&lt; "e and d are indeed different!" &lt;&lt; endl;
<br>} else {
<br>cout &lt;&lt; "Oh well, back to the drawing board...." &lt;&lt; endl;
<br>}
<br>return 0;
<br>}



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

顶部
热点频道推荐: C/S开发| 数据库| WEB开发| 嵌入式| 项目管理|
CNET开发专家团
专家组
Rank: 10Rank: 10Rank: 10



UID 259939
精华 1
积分 53
帖子 4
威望 -2
ZD币 16 元
阅读权限 255
注册 2007-11-9
状态 离线
  沙发
发表于 2008-3-19 15:02  资料  个人空间  短消息  加为好友 
------------



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

顶部
热点频道推荐: C/S开发| 数据库| WEB开发| 嵌入式| 项目管理|
 



当前时区 GMT+8, 现在时间是 2009-7-4 10:55

  Powered by Discuz! 5.5.0 © 2001-2007 Comsenz Inc.
Processed in 0.061798 second(s), 3/3 queries

清除 Cookies - 联系我们 - ZDNetChina中文社区 - 无图版