C++面向对象编程实现矩阵类时读写成员函数失效求助
自定义vector与matrix类矩阵读写功能异常排查
问题背景
- 开发场景:本科毕业论文配套代码,需实现自定义vector、matrix类层次结构,用于线性方程组求解
- 异常表现:新增功能后matrix类的元素写入、展示功能失效,同逻辑vector类功能正常;读写函数的cout提示可正常输出,但无法进行数值输入,且未修改过matrix读写相关代码
实现代码
vector类实现(vector.h,不使用模板)
#include <iostream> using namespace std; #pragma once class vector { protected: int n; double* vect; public: vector() { n = 1; vect = new double[n]; for (int i = 0; i < n; i++) { vect[i] = 0; } } vector(int dim) { n = dim; vect = new double[n]; for (int i = 0; i < n; i++) { vect[i] = 0; } } vector(const vector& v) { n = v.n; vect = new double[n]; for (int i = 0; i < n; i++) { vect[i] = v.vect[i]; } } ~vector() { delete[] vect; } int getsize() { return n; }; const vector& operator=(const vector&); bool operator== (const vector&) const; bool operator!= (const vector&) const; void read(); void display(); friend ostream& operator<<(ostream&, const vector&); friend istream& operator>>(istream&, const vector&); }; const vector& vector::operator= (const vector& c) { if (this == &c) return *this; if (this != &c) { if (n != c.n) { delete[] vect; n = c.n; vect = new double[n]; } for (int i = 0; i < n; i++) { vect[i] = c.vect[i]; } } return *this; } bool vector::operator== (const vector& c) const { if (n != c.n) return false; for (int i = 0; i < n; i++) { if (vect[i] != c.vect[i]) return false; } return true; } bool vector::operator!= (const vector& c) const { return !(*this == c); } void vector::read() { cout << "Insert vector elements:"; for (int i = 0; i < n; i++) { cin >> vect[i]; } } void vector::display() { cout << "The vector is: "; for (int i = 0; i < n; i++) { cout << vect[i]; cout << " "; } } ostream& operator<<(ostream& out, const vector& v) { for (int i = 0; i < v.n; i++) { out << " " << v.vect[i]; } return out; } istream& operator>>(istream& in, const vector& v) { for (int i = 0; i < v.n; i++) { in >> v.vect[i]; } return in; }
matrix类实现(matrix.h,异常版本)
#include "vector.h" class matrix { private: int n; vector** mat; public: matrix() { n = 2; mat = new vector * [n]; for (int i = 0; i < n; i++) { mat[i] = new vector[n]; for (int j = 0; j < n; j++) { mat[i][j] = 0; } } } matrix(int dim) { n = dim; mat = new vector * [n]; for (int i = 0; i < n; i++) { mat[i] = new vector[n]; for (int j = 0; j < n; j++) { mat[i][j] = 0; } } } matrix(const matrix& m) { n = m.n; mat = new vector * [n]; for (int i = 0; i < n; i++) { mat[i] = new vector[n]; for (int j = 0; j < n; j++) mat[i][j] = m.mat[i][j]; } } ~matrix() { for (int i = 0; i < n; i++) delete[] mat[i]; delete[] mat; } friend ostream& operator<<(ostream&, const matrix&); friend istream& operator>>(istream&, const matrix&); void read(); void display(); const matrix& operator=(const matrix&); }; const matrix& matrix::operator=(const matrix& m) { if (this == &m) return *this; if (this != &m) { for (int i = 0; i < n; i++) { delete[] mat[i]; } delete[] mat; n = m.n; mat = new vector*[n]; for (int i = 0; i < n; i++) { mat[i] = new vector[n]; } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { mat[i][j] = m.mat[i][j]; } } } return *this; } ostream& operator<<(ostream& out, const matrix& m) { for (int i = 0; i < m.n; i++) { out << m.mat[i][0]; for (int j = 1; j < m.n; j++) { out << " " << m.mat[i][j]; } out << endl; } return out; } istream& operator>>(istream& in, const matrix& m) { for (int i = 0; i < m.n; i++) { for (int j = 0; j < m.n; j++) in >> m.mat[i][j]; } return in; } void matrix::read() { cout << "Insert matrix elements:"<<endl; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) cin >> mat[i][j]; } } void matrix::display() { cout << "The matrix is:"; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) cout << mat[i][j]; } cout << endl; }
测试主函数代码
#include "vector.h" #include "matrix.h" int main() { vector v1(3); v1.read(); v1.display(); v1.~vector(); cout << endl; matrix m2(2); m2.read(); m2.display(); m2.~matrix(); system("pause"); return 0; }
问题解决方案
问题核心原因为matrix类的mat成员错误定义为vector**类型,生成了不符合预期的三维结构。调整方案如下:
- 将matrix类的
mat成员修改为vector*类型 - 在vector类中新增初始化函数用于初始化vector数组
调整后matrix类的读写、展示功能恢复正常。
内容的提问来源于stack exchange,提问作者ryuukia
相关产品推荐
相关产品推荐

