C++中矩阵与向量乘法运算(用友元)//一个矩阵与一个竖向量的乘法#include "iostream"using namespace std;class Matrix;class Vector{int* v; //指向一个数组,表示向量int sz; //向量的长度,可看作sz行1列的矩阵pu
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/03 04:05:12
![C++中矩阵与向量乘法运算(用友元)//一个矩阵与一个竖向量的乘法#include](/uploads/image/z/1580374-46-4.jpg?t=C%2B%2B%E4%B8%AD%E7%9F%A9%E9%98%B5%E4%B8%8E%E5%90%91%E9%87%8F%E4%B9%98%E6%B3%95%E8%BF%90%E7%AE%97%EF%BC%88%E7%94%A8%E5%8F%8B%E5%85%83%EF%BC%89%2F%2F%E4%B8%80%E4%B8%AA%E7%9F%A9%E9%98%B5%E4%B8%8E%E4%B8%80%E4%B8%AA%E7%AB%96%E5%90%91%E9%87%8F%E7%9A%84%E4%B9%98%E6%B3%95%23include+%22iostream%22using+namespace+std%3Bclass+Matrix%3Bclass+Vector%7Bint%2A+v%3B+%2F%2F%E6%8C%87%E5%90%91%E4%B8%80%E4%B8%AA%E6%95%B0%E7%BB%84%2C%E8%A1%A8%E7%A4%BA%E5%90%91%E9%87%8Fint+sz%3B+%2F%2F%E5%90%91%E9%87%8F%E7%9A%84%E9%95%BF%E5%BA%A6%2C%E5%8F%AF%E7%9C%8B%E4%BD%9Csz%E8%A1%8C1%E5%88%97%E7%9A%84%E7%9F%A9%E9%98%B5pu)
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;指向的数据再拷贝一份.即可.