Atu*_*tul 49 c++ private-constructor
可能重复:
在类中创建私有构造函数有什么用?
我们在哪里需要私人构造函数?我们如何实例化一个具有私有构造函数的类?
wkl*_*wkl 64
私有构造函数意味着用户无法直接实例化类.相反,您可以使用Named Constructor Idiom之类的东西创建对象,您可以在其中static创建可以创建和返回类实例的类函数.
Named Constructor Idiom用于更直观地使用类.C++ 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)); }
Run Code Online (Sandbox Code Playgroud)
还有很多其他的响应也符合为什么私有构造函数在C++中使用的精神(其中包括Singleton模式).
您可以用它做的另一件事是阻止继承您的类,因为派生类将无法访问您的类的构造函数.当然,在这种情况下,您仍然需要一个创建类实例的函数.
Nav*_*een 29
一个常见用途是在单例模式中,您只需要存在一个类的实例.在这种情况下,您可以提供一个static方法来执行对象的实例化.这样,可以控制实例化特定类的对象的数量.
当您不希望用户实例化您的类时,私有构造函数很有用.要实例化这样的类,需要声明一个静态方法,它执行'new'并返回指针.
具有私人ctors的课程不能放入STL容器中,因为它们需要复制ctor.
| 归档时间: |
|
| 查看次数: |
97221 次 |
| 最近记录: |