Как сделать общие поля класса без наследования в с++
Я делаю змейку в консоли (разделил на файлы) и в файле logic.cpp у меня такой код:
#include <iostream>
#include "logic.h"
using namespace std;
class Field
{
public:
static const int LENGTH = 10;
static const int WIDTH = 10;
static char field[LENGTH][WIDTH];
void Fill()
{
// заполянем поле
for (int i = 0; i < LENGTH; i++)
{
for (int j = 0; j < WIDTH; j++)
{
field[i][j] = '#';
}
}
}
};
class Apple
{
private:
int appleX, appleY;
// Field* filed;
public:
void FillApple()
{
for (int i = 0; i < 3; i++)
{
// генерируем координаты для яблок
appleY = 0 + rand() % Field::LENGTH;
appleX = 0 + rand() % Field::WIDTH;
// суем яблоки в поле
Field::field[appleY][appleX] = '@';
}
}
};
(Другой класс и методы не вставил)
Так вот, я хочу чтобы мои другие классы использовали поля из Field. Для этого я использую Field::
, но для этого мои поля должны быть в public, хотя я хочу чтобы они были в private (для инкапсуляции), но не получается. Также использовал наследование, и мои поля были в protected, но такой способ плохой. Также можно использовать глобальные переменные, но это так себе, хочу чтобы все было там где надо. Можно использовать ссылки или указатель, и я использовал // Field* filed;
, но не знаю насколько это правильно + когда передаю в метод, ничего не меняется. Помогите пожалуйста