在类函数调用期间丢失私有变量信息(losing private variable information during the class function calls)
下面的代码将在运行时显示私有成员变量(MaxRows,MaxCols)在调用时间函数输入时发生变化。 你能帮忙解决一下发生的事吗?
如您所见,第一个构造函数生成正确的私有变量显示。 但是这个功能会将它们分开。
#include <iostream> #include <string> #include <fstream> #include <cmath> #include <cstdlib> #include <ctime> #include <vector> #include <windows.h> #include <cstring> #include <cctype> #include <iomanip> #include <algorithm> #include <sstream> using namespace std; class TwoD { private: int MaxRows; int MaxCols; double** outerArray; public: TwoD(int MaxRows, int MaxCols) { outerArray = new double *[MaxRows]; for (int i = 0; i < MaxRows; i++) outerArray[i] = new double[MaxCols]; cout << MaxRows << MaxCols << endl; } void input() { cout << MaxRows << MaxCols << endl; for (int k = 0; k < MaxRows; k++) for (int j = 0; j < MaxCols; j++) cin >> outerArray[k][j]; } void outPut() { for (int l = 0; l < MaxRows; l++) { for (int m = 0; m < MaxCols; m++) cout << outerArray[l][m] << " "; cout << endl; } } ~TwoD() { for (int i = 0; i < MaxRows; i++) delete[] outerArray[i]; delete[] outerArray; } }; int main() { TwoD example(5, 2); example.input(); example.outPut(); return 0; }Below codes will show, when run, that the private member variables (MaxRows, MaxCols) are changing by the time function input is called. Could you please help what is going on?
As you can see the first constructor generates correct display of private variables. However the function will break them apart.
#include <iostream> #include <string> #include <fstream> #include <cmath> #include <cstdlib> #include <ctime> #include <vector> #include <windows.h> #include <cstring> #include <cctype> #include <iomanip> #include <algorithm> #include <sstream> using namespace std; class TwoD { private: int MaxRows; int MaxCols; double** outerArray; public: TwoD(int MaxRows, int MaxCols) { outerArray = new double *[MaxRows]; for (int i = 0; i < MaxRows; i++) outerArray[i] = new double[MaxCols]; cout << MaxRows << MaxCols << endl; } void input() { cout << MaxRows << MaxCols << endl; for (int k = 0; k < MaxRows; k++) for (int j = 0; j < MaxCols; j++) cin >> outerArray[k][j]; } void outPut() { for (int l = 0; l < MaxRows; l++) { for (int m = 0; m < MaxCols; m++) cout << outerArray[l][m] << " "; cout << endl; } } ~TwoD() { for (int i = 0; i < MaxRows; i++) delete[] outerArray[i]; delete[] outerArray; } }; int main() { TwoD example(5, 2); example.input(); example.outPut(); return 0; }最满意答案
您实际上从未将类成员设置为作为参数传递的值。
另外:您可能希望查看您的命名约定 - 通常使用maxRows而不是MaxRows
TwoD(int maxRows, int maxCols) : MaxRows(maxRows), MaxCols(maxCols) { outerArray = new ...You never actually set the class members to the values passed as parameters.
Also: you might want to look at your naming convention - normally use maxRows not MaxRows
TwoD(int maxRows, int maxCols) : MaxRows(maxRows), MaxCols(maxCols) { outerArray = new ...更多推荐
发布评论