【发布时间】:2022-01-10 10:18:03
【问题描述】:
亲爱的晚安
我有一个问题,看起来我正在使用类,并且在许多情况下我使用向量的向量(2D 向量),我的代码运行得很好。但是,我有点困惑,查看我的头文件,我在受保护的变量中声明了一个向量向量,然后在我的 cpp 文件的构造函数部分中,我再次声明了向量向量,但这次给出了所需的大小并具有所有元素中的“0”。但是,当我尝试在我的成员函数中使用这个向量向量时,如果我使用 .size() 输出是“0”并且我期待 3,似乎没有定义维度而不是“0”值。
但是,当我再次在成员中声明向量的向量(参见 cpp 文件中的注释行)函数时,代码给出了 3 和由“0”组成的 3 X 3 的完整矩阵。
这是为什么呢?使用构造函数基本上是给变量的值。
查看下一个代码,cpp 文件上的注释行是我再次声明向量的位置。
头文件是:
#pragma once
#include <iostream>
#include <vector>
class Matrix
{
private:
const int m_nRows;
const int m_nCols;
protected:
std::vector <std::vector <double>> MATRIX;
public:
Matrix(int rows, int cols);
~Matrix();
void getMatrix();
};
cpp文件是:
#include "Matrix.h"
Matrix::Matrix(int rows, int cols)
: m_nRows(rows),
m_nCols(cols)
{
std::vector <std::vector <double>> MATRIX(m_nRows, std::vector<double>(m_nCols, 0));
}
Matrix::~Matrix()
{
}
void Matrix::getMatrix()
{
//std::vector <std::vector <double>> MATRIX(m_nRows, std::vector<double>(m_nCols, 0));
std::cout << MATRIX.size() << std::endl;
for (auto& columns : MATRIX)
{
for (auto& element : columns)
{
std::cout << element << " ";
}
std::cout << "\n";
}
}
主文件是:
#include <iostream>
#include <vector>
#include "Matrix.h"
int main() {
int rows = 3;
int cols = 3;
Matrix SmallMatrix(rows, cols);
SmallMatrix.getMatrix();
system("pause>0");
}
【问题讨论】:
-
查找术语“范围”的含义。注释行声明了一个名为
MATRIX的变量,它 (1) 是函数Matrix::getMatrix()的局部变量 (2) 与名为MATRIX的Matrix的成员完全不同的对象和 (3) 当函数不再存在时返回给调用者。顺便说一句,你的构造函数做同样的事情 - 它创建一个名为MATRIX的变量,它是构造函数主体的本地变量,因此构造函数实际上根本不会影响名为MATRIX的成员。 -
谢谢你的回答,我明白了。