Ответ 1
Частный конструктор означает, что пользователь не может напрямую создать экземпляр класса. Вместо этого вы можете создавать объекты, используя Именованный конструктор Idiom, где у вас есть функции static
класса, которые могут создавать и возвращать экземпляры класса.
Идиома Именованного конструктора предназначена для более интуитивного использования класса. Пример, предоставленный в FAQ С++, относится к классу, который может использоваться для представления нескольких систем координат.
Это вытягивается непосредственно из ссылки. Это класс, представляющий точки в разных системах координат, но он может использоваться для представления как прямоугольных, так и полярных координатных точек, поэтому, чтобы сделать его более интуитивным для пользователя, для представления какой системы координат возвращается возвращаемая Point
, используются разные функции.
#include <cmath> // To get std::sin() and std::cos()
class Point {
public:
static Point rectangular(float x, float y); // Rectangular coord's
static Point polar(float radius, float angle); // Polar coordinates
// These static methods are the so-called "named constructors"
...
private:
Point(float x, float y); // Rectangular coordinates
float x_, y_;
};
inline Point::Point(float x, float y)
: x_(x), y_(y) { }
inline Point Point::rectangular(float x, float y)
{ return Point(x, y); }
inline Point Point::polar(float radius, float angle)
{ return Point(radius*std::cos(angle), radius*std::sin(angle)); }
Было много других ответов, которые также соответствуют духу того, почему частные конструкторы когда-либо используются в С++ (шаблон Singleton среди них).
Еще одна вещь, которую вы можете сделать с этим: предотвратить наследование вашего класса, поскольку производные классы не смогут получить доступ к вашему классу, конструктор. Конечно, в этой ситуации вам все равно нужна функция, которая создает экземпляры класса.