C++ 限制类对象的数量的方法
2013-09-02 14:33
309 查看
如何禁止产生类对象呢?只要将类的构造函数用private修饰即可。
那么,如何限制类只能产生一个类对象呢?只要借助于友元函数的static对象即可。
示例代码如下:
class Printer
{
private:
Printer()
{
cout<<"thePrinter constructed"<<endl;
}
public:
void what()
{
cout<<"It's a printer"<<endl;
}
friend Printer & thePrinter();
};
Printer & thePrinter()
{
static Printer p;
return p;
}
这样一来,Printer类的对象就只有唯一的p,而且只有在首次调用thePrinter函数时才生成,不调用就不生成。
而将类的构造函数用private修饰还有另外一个作用:禁止类被继承。任何想要继承Printer的新类都不能顺利构造出对象来。
接下来就应该讨论限制类所能产生的对象数量为N(N>1)的情况了。不过在正式提出解决方案之前,首先来了解一下伪构造函数。
所谓伪构造函数就是类的一种static函数,它能够产生对象,作用就像构造函数。
之所以需要构造函数,是因为类真正的构造函数现已被private修饰,不能被外界调用。
仍然以Printer为例,删除友元函数thePrinter,为类添加static Printer* makePrinter()成员函数。
示例代码为:
如此定义的Printer类就没有生成对象数量上的限制了,但是它不允许被继承。makePrinter函数就是Printer类的伪构造函数。
认识了伪构造函数之后再回到之前的问题:如何限制类所能产生的对象数量为N(N>1)?
书中提出的方案是以上述伪构造函数为基础的,只要为Printer类添加一个计数就好了。
示例代码如下:
上面代码实现出的Printer类被限制只能最多产生10个对象。
那么,如何限制类只能产生一个类对象呢?只要借助于友元函数的static对象即可。
示例代码如下:
class Printer
{
private:
Printer()
{
cout<<"thePrinter constructed"<<endl;
}
public:
void what()
{
cout<<"It's a printer"<<endl;
}
friend Printer & thePrinter();
};
Printer & thePrinter()
{
static Printer p;
return p;
}
这样一来,Printer类的对象就只有唯一的p,而且只有在首次调用thePrinter函数时才生成,不调用就不生成。
而将类的构造函数用private修饰还有另外一个作用:禁止类被继承。任何想要继承Printer的新类都不能顺利构造出对象来。
接下来就应该讨论限制类所能产生的对象数量为N(N>1)的情况了。不过在正式提出解决方案之前,首先来了解一下伪构造函数。
所谓伪构造函数就是类的一种static函数,它能够产生对象,作用就像构造函数。
之所以需要构造函数,是因为类真正的构造函数现已被private修饰,不能被外界调用。
仍然以Printer为例,删除友元函数thePrinter,为类添加static Printer* makePrinter()成员函数。
示例代码为:
class Printer { private: Printer() { cout<<"thePrinter constructed"<<endl; } public: void what() { cout<<"It's a printer"<<endl; } static Printer* makePrinter() { return new Printer(); } };
如此定义的Printer类就没有生成对象数量上的限制了,但是它不允许被继承。makePrinter函数就是Printer类的伪构造函数。
认识了伪构造函数之后再回到之前的问题:如何限制类所能产生的对象数量为N(N>1)?
书中提出的方案是以上述伪构造函数为基础的,只要为Printer类添加一个计数就好了。
示例代码如下:
class Printer { private: Printer() { cout<<"thePrinter constructed"<<endl; } static int counter; public: class TooManyObject { public: void what() { cout<<"Too many Object"<<endl; } }; void what() { cout<<"It's a printer"<<endl; } static Printer* makePrinter() { if(++counter>10) { cout<<"Stop "<<endl; exit(1); } return new Printer(); } }; int Printer::counter=0;
上面代码实现出的Printer类被限制只能最多产生10个对象。
相关文章推荐
- c++限制某个class所能产生对象数量的方法
- 【C++】限制某个类所能产生的对象数量
- 《More Effective C++》条款26:限制某个Class所能产生的对象数量
- More Effective C++ 条款26 限制某个class所能产生的对象数量
- More Effective C++----(26)限制某个类所能产生的对象数量
- More Effective C++ 阅读笔记(十二)--怎样限制实例化对象的数量
- More Effective C++ (限制类的对象数量)
- C++ 控制对象生成数量的一个方法
- C++对象数量跟踪限制
- [C++]限制一个类的对象只能在栈或堆上创建
- C++创建对象的两种方法(C++用new和不用new创建类对象)
- C++通过构造器,实现对象初始化的两种方法(重载、默认参数)
- C++对象两种方法的声明
- More Effective C++(条款26:限制某个class所能产生的对象个数)
- C++ 通过对象方式 、指针方式两种方式去访问成员变量(属性或者方法)
- (转载)C++创建对象的两种方法
- c++中cin对象中getline()方法和get()方法的区分
- 一点点限制用户上网pc数量的方法
- UITextField限制汉字数量最正确的姿势,解决iOS7下substringToIndex方法导致的崩溃
- 关于C++中定义对象及对象初始化的方法