C++ для начинающих.

14.2.2. Ограничение прав на создание объекта.

Доступность конструктора определяется тем, в какой секции класса он объявлен. Мы можем ограничить или явно запретить некоторые формы создания объектов, если поместим соответствующий конструктор в неоткрытую секцию. В примере ниже конструктор по умолчанию класса Account объявлен закрытым, а с двумя параметрами - открытым:

Class Account {

Friend class vector;

Public:

Explicit Account( const char*, double = 0.0 );

// ...

Private:

Account();

// ...

};

Обычная программа сможет теперь определять объекты класса Account, лишь указав как имя владельца счета, так и начальный баланс. Однако функции-члены Account и дружественный ему класс vector могут создавать объекты, пользуясь любым конструктором.

* Конструкторы, не являющиеся открытыми, в реальных программах C++ чаще всего используются для: предотвращения копирования одного объекта в другой объект того же класса (эта проблема рассматривается в следующем подразделе);

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