У вас есть в основном две проблемы:
Задача - 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;
}