C++中矩阵与向量乘法运算(用友元)//一个矩阵与一个竖向量的乘法#include "iostream"using namespace std;class Matrix;class Vector{int* v; //指向一个数组,表示向量int sz; //向量的长度,可看作sz行1列的矩阵pu
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/24 22:41:32
C++中矩阵与向量乘法运算(用友元)//一个矩阵与一个竖向量的乘法#include "iostream"using namespace std;class Matrix;class Vector{int* v; //指向一个数组,表示向量int sz; //向量的长度,可看作sz行1列的矩阵pu
C++中矩阵与向量乘法运算(用友元)
//一个矩阵与一个竖向量的乘法
#include "iostream"
using namespace std;
class Matrix;
class Vector{
int* v; //指向一个数组,表示向量
int sz; //向量的长度,可看作sz行1列的矩阵
public:
Vector(int s)//构造函数
{
sz=s;
if(s
C++中矩阵与向量乘法运算(用友元)//一个矩阵与一个竖向量的乘法#include "iostream"using namespace std;class Matrix;class Vector{int* v; //指向一个数组,表示向量int sz; //向量的长度,可看作sz行1列的矩阵pu
你犯的错误是C++初学者很容易犯的一个错误.Vector中出现了个以int类型为参数构造函数,但没有一个“拷贝构造函数”.你的multiply方法的反回值是Vector类型,当这个函数在返回时,会调用Vector的“拷贝构造函数”,编译器发现你没有自己定制一个“拷贝构造函数”,于是它自己给你加了一个默认的“拷贝构造函数”,这个默认的“拷贝构造函数”的默认行为就是按位来拷贝Vector对象,于是乎返回的个这Vector对象中的int* v;成员就指向一个multiply栈中的数据,而这个数据在multiply返回后就变为无用的了.这就是“野指针”的一种形式,因为它指向了一个已经返回了的函数的栈中的数据,所以它会出错.
知道了原因后,解决方法很简单,自己定义Vector的“拷贝构造函数”,然后将int* v;指向的数据再拷贝一份.即可.