| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 575 人关注过本帖
标题:[求助]析构函数的问题?
只看楼主 加入收藏
bill8888
Rank: 1
等 级:新手上路
帖 子:97
专家分:0
注 册:2007-3-10
收藏
 问题点数:0 回复次数:5 
[求助]析构函数的问题?

这一段代码:

#include<iostream>
#include<fstream>
using namespace std;
class Vector{
int* v; //指向一个数组,表示向量
int sz;
public:
Vector(int i){ v=new int[i];sz=i;}
~Vector(){ delete[] v;}
int size(){ return sz; }
void display();
int& operator[](int);
};
int& Vector::operator[](int i){
return v[i];
}
void Vector::display(){
for(int i=0; i<sz; ++i)
cout<<v[i]<<" ";
cout<<"\n";
}

class Matrix{
int* m;
int szl, szr;
public:
Matrix(int i,int j){m=new int[i*j];szl=i;szr=j;}
~Matrix(){ delete[] m;}
int sizeL(){ return szl; }
int sizeR(){ return szr; }
int& elem(int, int);
};
int& Matrix::elem(int i, int j){ return m[i*szr+j]; }

Vector multiply(Matrix& m, Vector& v){ //矩阵乘向量
Vector r(m.sizeL());
for(int i=0; i<m.sizeL(); i++){
r[i] = 0;
for(int j=0; j<m.sizeR(); j++)
r[i] += m.elem(i,j) * v[j];
} return r;
}
int main(){
ifstream in("in.txt");
int x,y; in>>x>>y;
Matrix ma(x,y);
for(int i=0; i<x; ++i)
for(int j=0; j<y; ++j)
in>>ma.elem(i,j);
in>>x;
Vector ve(x);
for(int i1=0; i1<x; ++i1)
in>>ve[i1];
multiply(ma,ve).display();
return 0;
}

文件是:in.txt
内容为:
4 3
1 2 3
0 1 2
1 1 3
1 2 1
3
2 1 0
这个程序有什么问题啊,总是输不出正确的答案?
正确的答案是:4 1 3 4
请高手帮我看一下////

搜索更多相关主题的帖子: 函数 
2007-04-22 21:27
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
Vector multiply(Matrix& m, Vector& v){ //矩阵乘向量
Vector r(m.sizeL());
for(int i=0; i<m.sizeL(); i++){
r[i] = 0;
for(int j=0; j<m.sizeR(); j++)
r[i] += m.elem(i,j) * v[j];
} return r;
}

怎么乘出来是个向量???
还有,你没有实现copy构造,这里用到了,沿用默认的浅copy会产生内存分配错误的问题!

Fight  to win  or  die...
2007-04-22 22:44
bill8888
Rank: 1
等 级:新手上路
帖 子:97
专家分:0
注 册:2007-3-10
收藏
得分:0 

明白了,直接在Vector内里添加一个拷贝构造函数
Vector(const Vector& s)
{
sz=s.sz;
v=new int[sz];
for(int i=0;i<sz;i++)
v[i]=s.v[i];
}
就可以了;
呵呵,谢谢哈
学C++没多久,有很多这些细节问题不是很清楚,今后还请多多帮助.........


2007-04-23 12:43
bill8888
Rank: 1
等 级:新手上路
帖 子:97
专家分:0
注 册:2007-3-10
收藏
得分:0 
现在新问题 又来了,
我现在编译这个程序后,能够正常运行且显示,可我退出编译器后在生成的文件夹里点击生成的可执行文件,就出问题了,他里面没有输出信息啊(不是是我看不见,而是显示不出来),是不是我的编译器的设置有问题啊,为什么会出现这种问题?
其他的可以显示出,就这个程序不行,看来这个程序还是有一些问题哈

[此贴子已经被作者于2007-4-23 13:25:02编辑过]


2007-04-23 13:21
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
以下是引用bill8888在2007-4-23 13:21:35的发言:
现在新问题 又来了,
我现在编译这个程序后,能够正常运行且显示,可我退出编译器后在生成的文件夹里点击生成的可执行文件,就出问题了,他里面没有输出信息啊(不是是我看不见,而是显示不出来),是不是我的编译器的设置有问题啊,为什么会出现这种问题?
其他的可以显示出,就这个程序不行,看来这个程序还是有一些问题哈

你要读取一个文件吧,你用的估计是vc,所以exe执行文件和根目录不在同一位置,你把文件拷进debug里就行了,或者在打开文件时加上路径。


Fight  to win  or  die...
2007-04-23 19:39
bill8888
Rank: 1
等 级:新手上路
帖 子:97
专家分:0
注 册:2007-3-10
收藏
得分:0 

嗯,我用的是VC++6.0
看来是这么回事,我以为把文件放在这建的工程里就可以了,就没有把他放到DEBUG里,再说了,我这个文件是在编译里建的,它自动建在那个文件夹下面.谢谢了


2007-04-23 21:50
快速回复:[求助]析构函数的问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019812 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved