Oleg_SK, не содержащие какого-то специфичного кода методы "деструктор", "конструктор по умолчанию", "конструктор копирования" и "оператор присваивания" в C++ объявлять не обязательно - компилятор их создаёт и заполняет стандартным кодом автоматически.
Цитата Oleg_SK:
То есть конструкторы и деструктор класса нужно всегда объявлять как публичные методы. »
|
Нет, не всегда.
Порою вышеперечисленные методы специально объявляют, как private, если хотят запретить данное действие в классе и его потомках. Существование "закрытого" метода в родительском классе не позволяет компилятору генерировать стандартный код в производных объектах. Данное действие будет запрещено до явного объявления открытого метода.
Явный пример - класс
TObject из Borland C++ Builder. Объекты, производные от данного абстрактного класса, могут располагаться только в "куче", из-за чего операции создания объекта-копии и присваивания одного объекта другому применимы. По-этому для данного объекта явно указаны private методы
TObject (const TObject &) и
TObject& operator = (const TObject &).
Далее, для объектов класса
TComponent - невидимый компонент экранной формы - и производных от него всегда должно быть определено значение поля "владелец" (Owner). В*результате адрес компонента-владельца указывается, как параметр конструктора, а конструктор по умолчанию
TComponent (void) также объявлен "закрытым" (или "защищённым", не помню точно)
А вот результат создания "закрытого" деструктора я предсказать не могу