您的位置:首页 > 编程语言 > C语言/C++

C++ 控制对象生成数量的一个方法

2018-03-09 13:30 357 查看
如果一个类希望自己的对象数量可以控制在一定范围的话,可以采用对象计数的方式。在类中添加对象当前的数量和对象总共的数量(都设置为静态的全局类型)

但是类可能会通过被继承或者其他方式产生新的对象,需要杜绝这种方式,所以采用伪构造函数的方式。

伪构造函数就是将构造函数定义为私有类型,然后通过其他的供油成员函数调用构造函数来实现对象的产生,从而杜绝了构造函数和复制构造函数这两种产生新的对象的途径(带有私有构造函数的类不能用作基类,也不可以内嵌于其他对象中)。

类定义如下:

#include <iostream>
#include <string>
using namespace std;
class TooManyObjects{}; //异常
class Printer
{
public:
//TooManyObjects t;
//伪构造函数
static Printer *makePrinter();  //声明为static所以可以直接调用
static Printer *makePrinter(const Printer &rhs);
//dtor
~Printer(){--numObjects;}
#if 1
friend ostream &operator <<(ostream &out, const Printer &p){
out << "现在的数量为:" << p.numObjects << endl;
return out;
}
#endif

private:
static size_t numObjects;
static const size_t maxObjects = 10;
//私有构造函数
Printer();
Printer(const Printer &rhs);

};

size_t Printer::numObjects = 0;
const size_t Printer::maxObjects;

Printer::Printer()
{
if(numObjects >= maxObjects)
throw TooManyObjects();
++numObjects;
}

Printer::Printer(const Printer &rhs)
{
if(numObjects >= maxObjects)
throw TooManyObjects();
++numObjects;
}

Printer *Printer::makePrinter()
{
return new Printer;
}

Printer *Printer::makePrinter(const Printer &rhs)
{
return new Printer(rhs);
}

int main()
{
Printer *p = Printer::makePrinter();
Printer *p1 = Printer::makePrinter();
Printer *p2 = Printer::makePrinter();
Printer *p3 = Printer::makePrinter();
Printer *p4 = Printer::makePrinter();
Printer *p5 = Printer::makePrinter();
Printer *p6 = Printer::makePrinter();
Printer *p7 = Printer::makePrinter();
Printer *p8 = Printer::makePrinter();
Printer *p9 = Printer::makePrinter();
try{
Printer *p10 = Printer::makePrinter();
}
catch(TooManyObjects &t){
cout << "too mant objects" << endl;
}

cout << *p;
return 0;
}


打印结果为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐