Язык программирования C/С++
22.07
СобеЗ С++ 🚀 Часть 3
❓ Что означает статическая (static) переменная /и static function в C++?
📢 Переменная, объявленная как static, выделяет память в области статического хранения только один раз за время выполнения программы. Поскольку существует только одна копия этой переменной для всех объектов, её также называют членом класса.
📢 Когда мы объявляем static в заголовочном файле, мы сообщаем компилятору о существовании статической переменной, но на самом деле не определяем её (это похоже на предварительное объявление). Поскольку статические переменные не являются частью экземпляров класса (они обрабатываются аналогично глобальным переменным и инициализируются при запуске программы), вы должны явно определить статическую переменную за пределами класса, в глобальной области.
❓ Что означает static function в C++?
Статические функции могут использоваться для работы со статическими переменными в классе или для выполнения операций, которые не требуют экземпляра класса. Однако действия, выполняемые в статической функции, должны быть концептуально и семантически сильно связаны с классом. Некоторые ключевые моменты о static function:
✅ static function не имеют указателя this
✅ static function не могут быть виртуальными
✅ static function не могут обращаться к нестатическим членам
✅ Модификаторы const и volatile недоступны для static function.
✅ На практике, статическая функция означает, что вы можете вызывать такие функции без создания экземпляра класса. Если у вас есть статическая функция void bar() в классе Foo, вы можете вызвать её так: Foo::bar(), не создавая экземпляр класса Foo.
Так как указатель this всегда содержит адрес памяти текущего объекта, а для вызова статической функции-члена объект вообще не требуется, он не может иметь указателя this.
✅ A virtual member - это что-то, что напрямую не связано с классом, а только с экземпляром. "Виртуальная функция" - это (по определению) функция, которая динамически связывается, т.е. правильная реализация выбирается во время выполнения в зависимости от динамического типа данного объекта. Поэтому, если нет объекта, не может быть виртуального вызова.
#код #интервью #ответ #айти #itвроссии #IT #программирование #программистеще контент в этом сообществе
еще контент в этом соообществе
Язык программирования C/С++
22.07
войдите, чтобы увидеть
и подписаться на интересных профи