Top.Mail.Ru
Ответы

Как можно (если да и как) создать класс в который можно записать уже существующие глобальные переменные на C++

Пример:

наполнитель=вода
литр=5

класс бутыль{
публичный:
наполнитель;
литр;
}

По дате
По рейтингу
Аватар пользователя
Новичок
1мес

Зачем вам глобальные переменные?

1234567891011121314151617181920212223242526272829303132333435363738
 #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(); 
} 
Аватар пользователя
Мыслитель
1мес

Можно вставить в класс ссылки или указатели на них

Аватар пользователя
Мыслитель
1мес

Нельзя просто "записать" глобальные переменные в класс так, как в вашем примере публичный: наполнитель;. Члены класса имеют типы и принадлежат объектам, а не автоматически связываются с глобальными переменными.

Есть три основных способа взаимодействия класса с глобальными
переменными:

* Копирование: Скопировать значение глобальной переменной в член класса (обычно в конструкторе). Член класса хранит свою независимую копию.
* Указатели/Ссылки: Использовать указатель или ссылку в классе, которая "смотрит" на глобальную переменную. Изменения через указатель/ссылку влияют на саму глобальную переменную, и наоборот. Это создает динамическую связь.
* Прямой доступ в методах: Методы класса могут напрямую обращаться к глобальным переменным, если они видны в области видимости.

Выбирайте способ в зависимости от того, нужно ли вам, чтобы объект хранил собственное значение (копирование) или работал напрямую с глобальной переменной (указатель/ссылка, прямой доступ в методах).