设为首页 加入收藏

TOP

3.5.3 通过构造函数约束对象的创建
2013-10-07 15:31:19 来源: 作者: 【 】 浏览:78
Tags:3.5.3 通过 构造 函数 约束 对象 创建

3.5.3   通过构造函数约束对象的创建

假设我们有一个Emp类,它有一个具有惟一性的用来表示雇员编号的数据成员:

 

而且,我们希望阻止这种情况的发生:创建一个Emp的对象但不对数据成员id进行初始化。简而言之,我们不愿接受如下形式的定义:

 

例3-24

 

本例在定义elvis时产生一个错误:创建对象elvis时,要求编译器在main函数中调用Emp的默认构造函数,而Emp的默认构造函数是私有的,不能在main函数中访问。Cher的创建是合法的,因为Emp的带参构造函数是公有的,可以在main函数中访问。

我们在private区声明Emp的默认构造函数是为了强调:创建Emp的对象时,必须指定雇员编号,即使改变Emp声明。

 
不过,即使在Emp的声明中删除Emp的默认构造函数,如下所示变量定义仍是错误的。因为Emp没有提供公有的默认构造函数。
 

多数情况下,编译器为类生成一个公有的默认构造函数,只有下面两种情况例外:

一个类显式地声明了任何构造函数,编译器不生成公有的默认构造函数。在这种情况下,如果程序需要一个默认构造函数,由类的设计者提供。

一个类声明了一个非公有的默认构造函数,编译器不生成公有的默认构造函数。

因此,对第一条Emp对象声明,编译器不生成公有的默认构造函数,因为类声明中包含了一个构造函数和一个非公有的默认构造函数;对第二条Emp对象声明,编译器也不生成公有的默认构造函数,因为类声明中已经包含了构造函数。

C++(www.cppentry.com)程序员常常会将部分构造函数设计为私有成员,将另一部分设计为公有成员,以确保在创建对象时进行正确的初始化。一个私有构造函数与普通的私有成员函数一样,拥有类范围属性(见3.1.4小节),因而不能在类之外进行调用。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.5.8 转型构造函数与隐式类型转换 下一篇3.5 构造函数与析构函数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python中文网 - 人生 (2025-12-24 18:49:47)
·【整整648集】这绝对 (2025-12-24 18:49:44)
·Python超详细一条龙 (2025-12-24 18:49:42)
·【超详细】JDK 下载 (2025-12-24 18:19:32)
·Java_百度百科 (2025-12-24 18:19:29)