【面试题】剑指Offer-2-如何控制一个类生成对象的个数
来源:互联网 发布:青岛优创数据怎么样 编辑:程序博客网 时间:2024/05/16 05:21
题目概述
原题目是,如何控制一个类只生成一个对象
这里我们进行扩展
问题1:控制一个类不能生成对象
问题2:控制一个类只生成一个对象
问题3:控制一个类生成对象的个数在一定数量之间
问题1:如何控制一个类不能生成对象
解决思路
一个类生成对象必然会调用其构造函数
这里只需将构造函数定义成私有成员,便可实现一个类无法生成对象
代码实现
class A{private:A(){} A(const A&) {}};void Test(){A a;//a无法生成}
问题2:如何控制一个类只生成一个对象
接着上题思路,将构造函数定义成私有成员
方法(1)
通过友元函数访问类的私有构造函数
代码实现
class A{public:friend A& construct();private:A(){}A(const A&){}};A& construct(){static A a;return a;}void Test(){construct();}
方法(2)
通过静态成员函数访问私有构造函数
代码实现
class A{public:static A& construct();private:A(){}A(const A&){}};A& A::construct(){static A a;return a;}void Test(){A::construct();}
问题3:如何控制一个类生成的对象的数量在一定数量之间
思路
定义两个静态成员变量,一个为num,统计对象的个数
另一个是maxsize,初始化为允许最多生成对象的个数
在调用构造函数的时候,判断num是否已经达到最大值
若达到,则抛出异常
否则,自增num
代码实现
//3、如何控制一个类生成对象的数量在一定的范围之间#include<iostream>using namespace std;class A{public:A(){if (num >= maxsize){throw string("The object is full");}++num;}~A(){--num;}private:static size_t maxsize;static size_t num;};size_t A::maxsize = 10;size_t A::num = 0;
小结
通过该题,需要掌握静态成员在类中的定义以及初始化方法
以及如何定义类的友元函数
发散思维,我们可以通过将拷贝构造函数,赋值运算符重载函数定义成私有成员来达到防拷贝
1 0
- 【面试题】剑指Offer-2-如何控制一个类生成对象的个数
- 剑指offer面试题之求一个整数二进制中1的个数
- 剑指offer面试题30最小的k个数
- [剑指offer][面试题10]二进制中1的个数
- [剑指offer][面试题30]最小的k个数
- 《剑指offer》面试题10二进制中1的个数
- 【剑指offer】面试题10:二进制中1的个数
- 【剑指offer】面试题10:二进制中1的个数
- 【剑指offer】面试题30:最小的K个数
- 剑指offer 面试题10 二进制中1的个数
- 剑指Offer:面试题10 二进制中1的个数
- 剑指Offer:面试题30 最小的k个数
- 剑指offer:面试题30,求最小的K个数
- 《剑指Offer》面试题10:二进制中1的个数
- 剑指offer 面试题30—最小的k个数
- 剑指offer-面试题10-二进制中1的个数
- 剑指offer 面试题30 最小的K个数
- 【剑指offer】 面试题10: 二进制中1的个数
- CNN上BP的简单推导
- 如何用php与thrift连接base
- onATTACH的参数
- Akka 初探(一)
- python利用微信公众号报警代码
- 【面试题】剑指Offer-2-如何控制一个类生成对象的个数
- Android程序员的进阶之路
- Memcached与Redis
- JavaScript 元素简易动画
- CentOS7内核参数
- 刚登陆SQL Server2008R2数据库就出错
- 大数据:Spark Standalone 集群调度(一)从远程调试开始说application创建
- Android Studio gradle基础
- aso