私有化构造函数

haow85 2010-09-09 03:31:24
在什么情况下会通过私有化构造函数来使得一个 class 不能被 instantiate?
...全文
278 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjjll123 2010-09-10
  • 打赏
  • 举报
回复
单例模式嘛。就是这样的哇
youlanting 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 haow85 的回复:]
引用 7 楼 just_one_two 的回复:

把构造函数设置成私有的,就是不让你去构造某个对象,而只能通过这个类的内部来返回一个对象给你,在设计模式中的单件模式中有使用

我看的网上的单件模式的介绍,说的是只有一个对象的情况。比如说要写一个关于美国政府官员的程序,因为美国总统只有一个,所以如果定义了美国总统这个类的时候,限制它只能有一个对象比较好。

如果私有化函数的话,那么只能……
[/Quote]

个人觉得,
通过static方法调用类的私有构造函数 实现对象的创建,可以创建不止一个对象,创建的数量可以另设static数据成员控制,达到限定数目,析构除之。

static方法中创建的对象不一定是全局的。你在static方法中创建了对象并返回该对象,该对象是否全局与你自己的设置的作用域生存期有关,与普通变量没什么区别。
youlanting 2010-09-10
  • 打赏
  • 举报
回复
单件模式 尝试限定实例化的对象的数量 不希望用户实例化该类的对象
十八道胡同 2010-09-10
  • 打赏
  • 举报
回复
单例模式 需要这么做
haow85 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 just_one_two 的回复:]

把构造函数设置成私有的,就是不让你去构造某个对象,而只能通过这个类的内部来返回一个对象给你,在设计模式中的单件模式中有使用
[/Quote]
我看的网上的单件模式的介绍,说的是只有一个对象的情况。比如说要写一个关于美国政府官员的程序,因为美国总统只有一个,所以如果定义了美国总统这个类的时候,限制它只能有一个对象比较好。

如果私有化函数的话,那么只能通过类中的 static 函数来访问类的成员。这样的话一方面只有唯一一个数据,也就是定义在这个类中的数据,另一个方面这个唯一的数据是可以全局访问的。

我这么说对不对?
haow85 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 youlanting 的回复:]

引用 15 楼 haow85 的回复:
引用 13 楼 youlanting 的回复:

引用 10 楼 haow85 的回复:
引用 7 楼 just_one_two 的回复:

把构造函数设置成私有的,就是不让你去构造某个对象,而只能通过这个类的内部来返回一个对象给你,在设计模式中的单件模式中有使用

我看的网上的单件模式的介绍,说的是只有一个对象的情况。比如说要写一个关于美……
[/Quote]
可以有全聚德静态变量,别的文件访问不到。或者局部得分静态便亮。一个类里面可一定以一个 public 的景泰便亮,这样就可以蜷局防蚊了。
youlanting 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 haow85 的回复:]
引用 13 楼 youlanting 的回复:

引用 10 楼 haow85 的回复:
引用 7 楼 just_one_two 的回复:

把构造函数设置成私有的,就是不让你去构造某个对象,而只能通过这个类的内部来返回一个对象给你,在设计模式中的单件模式中有使用

我看的网上的单件模式的介绍,说的是只有一个对象的情况。比如说要写一个关于美国政府官员的程序,因为美国总统只有一个,所以……
[/Quote]

一般static生命期处于整个程序运行期间,但是可见性不一定

haow85 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 youlanting 的回复:]

引用 10 楼 haow85 的回复:
引用 7 楼 just_one_two 的回复:

把构造函数设置成私有的,就是不让你去构造某个对象,而只能通过这个类的内部来返回一个对象给你,在设计模式中的单件模式中有使用

我看的网上的单件模式的介绍,说的是只有一个对象的情况。比如说要写一个关于美国政府官员的程序,因为美国总统只有一个,所以如果定义了美国总统这个类的时候,限制它只能有一个对象……
[/Quote]
我是说设定 static 的方法之后,在程序的全局都可以通过调用 static 的方法来防问类内的成员。
xurongzhu 2010-09-09
  • 打赏
  • 举报
回复
单例模式的情况下。
@井九 2010-09-09
  • 打赏
  • 举报
回复
知道构造可以私有就行,没有需求就不用。
just_one_two 2010-09-09
  • 打赏
  • 举报
回复
把构造函数设置成私有的,就是不让你去构造某个对象,而只能通过这个类的内部来返回一个对象给你,在设计模式中的单件模式中有使用
  • 打赏
  • 举报
回复
防止隐式转化吧。。
  • 打赏
  • 举报
回复
设计模式中的 单件模式
Baesky 2010-09-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 haow85 的回复:]
在什么情况下会通过私有化构造函数来使得一个 class 不能被 instantiate?
[/Quote]
用抽象类如何?
pengzhixi 2010-09-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 haow85 的回复:]
在什么情况下会通过私有化构造函数来使得一个 class 不能被 instantiate?
[/Quote]
你可以看看单件模式。
  • 打赏
  • 举报
回复
私有也可以被友元访问到..
ccltiancai 2010-09-09
  • 打赏
  • 举报
回复
控制class的实例化数量,如单件

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧