Getter 函数,用于在 2d 数组是类的数据成员时检索 2d 数组元素



我有一个二维数组,它是一个类的数据成员。 我将其初始化为false.

它位于自己的 .cpp 类文件中。

格式为:

//constructor
genericClassName::genericClassName(bool)
{
bool genericArray [3][3] = 
{
{ false, false, false },
{ false, false, false },
{ false, false, false },
};

从我的主要方法中,我使用了以下格式的 getter 函数:

//creation of an object of the class
genericClassName objectName;
//console output
std::cout << objectName.getterFunction (1, 1) << std::endl;

()中的数字是传递给getterFunction的参数,用于表示 2d 数组的下标。 按该顺序排列的行和列。

类.cpp文件中的 getterFunction 定义采用以下格式:

bool genericClassName::getterFunction (int row, int column)
{
return genericArray[row][column];
}

函数未返回0。 相反,我得到一个三位数的数字。 我不确定函数调用是否错误,数组的初始化是否错误,或者 getter 的定义是否错误。 定义是否创建一个本地数组,该数组不是初始化为 false 的数组?

获取器是公开的。 阵列是私有的。

你主要有两个问题:

问题 - 1:您在构造函数中声明了一个数组,这使得不初始化您的类成员。因此,当您使用getterFunction()时,您正在访问未初始化的数组元素,该元素会给出一些垃圾值。

问题 - 2:您在这里提到了一个参数化构造函数,

//constructor
genericClassName::genericClassName(bool)
{ .... }                          ^^^^^^

并在不传递参数的情况下创建了实例

//creation of an object of the class
genericClassName objectName;           // this need a default constructor
^^^^^^^^^^^^  

如果这是您的所有代码,我认为不会因为您没有在代码中定义任何default constructor而编译代码。


非通用的修复方法如下:看这里

class genericClassName
{
private:
bool genericArray [3][3];  // this has be defined here/ not generic anymore
public:
genericClassName()
{
for (auto &row : genericArray)
for (auto& ele: row)
ele = false;
}
genericClassName(bool trueOrfalse)  
{
for (auto &row : genericArray)
for (auto& ele: row)
ele = trueOrfalse;
}
.............
.............

为了使 2D 数组通用,您可以使用std::vector.这将如下所示:

在这里查看直播

#include <iostream>
#include <vector>
using Type2D = std::vector< std::vector<bool> >;
class genericClassName
{
private:
Type2D genericArray;
public:
genericClassName()  // defualt constrctor with some random size
:genericArray(3, std::vector<bool>(3, false))
{}
genericClassName(bool trueOrfalse, int size)  // use initilizer list here
:genericArray(size, std::vector<bool>(size, trueOrfalse))
{}

bool getterFunction (int row, int column)
{   return genericArray[row][column];     }
// just to print all elements
friend std::ostream& operator<<(std::ostream& out, const genericClassName& obj);
};
std::ostream& operator<<(std::ostream& out, const genericClassName& obj)
{
for (const auto &row : obj.genericArray)
for (const auto& ele: row)
out << ele << " ";
return out;
}
int main(void)
{
genericClassName objectName2;  // works with default constrctor
std::cout << objectName2.getterFunction(1, 1) << std::endl;
std::cout << objectName2 << std::endl;
genericClassName objectName(true, 4); // specify the size of your 2D array as well
std::cout << objectName.getterFunction(1, 1) << std::endl;
std::cout << objectName << std::endl;
return 0;
}

这是工作代码。 问题在于在构造函数中将布尔值分配给 2 个 dim 数组。

#include <iostream>
#include <cstdlib>
using namespace std;
class genericClassName{
bool genericArray [3][3];
public:
genericClassName()
{
int i, j;
for( i=0;i<3;i++)
for(j=0;j<3;j++)
genericArray[i][i] = false;
}
bool getterFunction (int row, int column)
{
return genericArray[row][column];
}
};
int
main(void)
{
genericClassName objectName;
cout << objectName.getterFunction (1, 1) << endl;
return 0;
}

最新更新