Как можно (если да и как) создать класс в который можно записать уже существующие глобальные переменные на C++
Пример:
наполнитель=вода
литр=5
класс бутыль{
публичный:
наполнитель;
литр;
}
Зачем вам глобальные переменные?
#include <iostream>
#include <string>
const auto init = []() {
std::cout.setf(std::ios::fixed);
std::cout.precision(3);
return 'c';
}();
struct BasicData {
inline static const float capacity = 5.0F;
inline static const std::string content{ "Вода" };
};
class Bottle {
public:
Bottle() = default;
Bottle(const float capacity, const std::string& content)
: capacity(capacity), content(content) {}
void set_capacity(const float value) {
capacity = value;
}
void set_content(const std::string_view& ref) {
content = ref;
}
private:
float capacity = BasicData::capacity;
std::string content{ BasicData::content };
friend std::ostream& operator<<(std::ostream& out, const Bottle& bottle) {
return out << bottle.content << " : " << bottle.capacity << '\n';
}
};
int main() {
Bottle any;
std::cout << any;
std::cin.get();
}
Можно вставить в класс ссылки или указатели на них
Нельзя просто "записать" глобальные переменные в класс так, как в вашем примере публичный: наполнитель;. Члены класса имеют типы и принадлежат объектам, а не автоматически связываются с глобальными переменными.
Есть три основных способа взаимодействия класса с глобальными
переменными:
* Копирование: Скопировать значение глобальной переменной в член класса (обычно в конструкторе). Член класса хранит свою независимую копию.
* Указатели/Ссылки: Использовать указатель или ссылку в классе, которая "смотрит" на глобальную переменную. Изменения через указатель/ссылку влияют на саму глобальную переменную, и наоборот. Это создает динамическую связь.
* Прямой доступ в методах: Методы класса могут напрямую обращаться к глобальным переменным, если они видны в области видимости.
Выбирайте способ в зависимости от того, нужно ли вам, чтобы объект хранил собственное значение (копирование) или работал напрямую с глобальной переменной (указатель/ссылка, прямой доступ в методах).