C/C++
C++: в чем хоть какая-то польза от инициализаторов (которые через двоеточие в конструкторе класса)?
Что приходит на ум - так это возможность инициировать нужным значением родительский класс из конструктора дочернего.
в том что будет инициализация полей при создании, а не присваивание
Конечно есть, ибо в некоторых случаях, которые активно применяются на практике, трудно сделать по другому. Вот пример кода, в котором мы имитируем класс, реализующий идиому RAII:
#include
#include
// Класс реализует идиому RAII (Resource Acquisition Is Initialization,
// захват ресурса есть инициализация). Захват ресурса и его освобождение
// оформлены как конструктор и деструктор
class Data
{
private:
std::string data_str;
public:
// Конструктор без аргументов не существует
Data() = delete;
// Конструктор копирования удален явным образом
Data( Data& ) = delete;
// Объект Data владеет строкой str
Data( const char* str )
{
if( str )
{
data_str.assign(str);
}
else
{
throw std::logic_error("NULL pointer as data");
}
}
~Data() { data_str.clear(); };
const std::string& data() const { return data_str; };
// Копирующая операция явно запрещена, присвоить значение можно
// только при создании объекта
Data& operator=(Data const&) = delete;
};
class App
{
private:
Data app_name;
Data app_version;
public:
App( const char* name, const char* version ) : app_name(name),
app_version(version) {}
void about( void )
{
std::cout
Вадим Самойленко
Проще говоря, инициализаторы необходимы если у класса есть константные атрибуты?
Ня, это замечательный вопрос! Инициализаторы в C++ являются важной частью языка, так как они обеспечивают эффективность и правильность инициализации членов класса при создании объектов.
Когда вы создаете объект класса, конструктор этого класса автоматически вызывается. Если вы не используете инициализаторы в конструкторе класса, то члены класса будут проинициализированы значениями по умолчанию. Однако это не всегда подходит, так как значения по умолчанию могут быть неопределенными или неэффективными.
Инициализаторы позволяют нам явно определить начальные значения членов класса при создании объекта. Это уменьшает время выполнения программы, так как значения не нужно искать или вычислять во время выполнения программы. Кроме того, использование инициализаторов улучшает безопасность программы, так как мы избегаем непредсказуемого поведения, вызванного неопределенными значениями.
Таким образом, использование инициализаторов в конструкторе класса является хорошей практикой программирования в C++. Они позволяют явно инициализировать члены класса, что улучшает эффективность и безопасность программы.
Когда вы создаете объект класса, конструктор этого класса автоматически вызывается. Если вы не используете инициализаторы в конструкторе класса, то члены класса будут проинициализированы значениями по умолчанию. Однако это не всегда подходит, так как значения по умолчанию могут быть неопределенными или неэффективными.
Инициализаторы позволяют нам явно определить начальные значения членов класса при создании объекта. Это уменьшает время выполнения программы, так как значения не нужно искать или вычислять во время выполнения программы. Кроме того, использование инициализаторов улучшает безопасность программы, так как мы избегаем непредсказуемого поведения, вызванного неопределенными значениями.
Таким образом, использование инициализаторов в конструкторе класса является хорошей практикой программирования в C++. Они позволяют явно инициализировать члены класса, что улучшает эффективность и безопасность программы.
Похожие вопросы
- Программирование, динамическое выделение памяти в конструкторе класса
- Написать программу на C++.Создать класс vector3d, задаваемый тройкой координат. Создать конструктор...
- C++ слишком много значений инициализатора.
- Создать простой класс, конструктор, и несколько функций. Не могу решить задачу, плохо понял тему, помогите пожалуйста.
- В QtCreator для Qt 4.8 (и 5 может также), у класса формы главной, функция конструктор, делает не понятное наследование?
- Компилятор ворует rvalue конструктор!
- Класс Poll и класс Variant (тема инкапсуляция) C++
- Помогите понять отношения между классами / C/C++
- Лёгкое задание с классами C++
- Передача в метод класса указателя на функцию C++