@Prosciutto
Постигаю

Правильно ли реализовано делигирование конструктора?

Должен ли первый конструктор класса (первый в каскаде конструкторов) инициализировать ВСЕ поля создаваемого объекта? Даже те, которые сразу не могут быть инициализированны логичными значениями, т.е соответствущими логике программы? Такие поля нулями инициализировать или оставить без значений? С точки зрения безопасности кажется логичным их все занулить, чтобы избежать UB при несвоевременом обращении к ним.

Рассмотрим код:
class Rectangle
{
private:
	int height;
	int width;
	int color;
	bool isVertical;
public:
	Rectangle(int height, int width)   // нужно ли в этом "первом" конструкторе инициализировать 
	{                                  // поля color и isVertical искусственными значениями? 
		this->height = 10;             
		this->width = 20;
	}
	Rectangle(int height, int width, int color) : Rectangle(height, width)
	{
		this->color = 1;
	}
	Rectangle(int height, int width, int color, bool isVertical) : Rectangle(height, width, color)
	{
		this->isVertical = isVertical;
	}
};
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
Разумеется, должен. Иначе, если объект твоего класса создадут первым конструктором, там будет непонятно что
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@dima20155
you don't choose c++. It chooses you
Если вы хотите, чтобы color и isVertical имели определенные значения - инициализируйте. Компиляторы не гарантируют, что инициализируют целочисленные значения именно нулями (хотя такое часто встречается). По некоторым style гайдам считается плохой практикой объявлять переменные без присвоения им какого-либо значения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы