通过私有化构造函数强化不可实例化的能力:
企图通过将一个类做成抽象类来强制该类不可被实例化,这是行不通的。
有简单的习惯用法可以确保一个类不可被实例化。由于只有一个类不包含显示的构造函数的时候,编译器才会生成默认的构造函数,所以我们只要让这个类包含单个显示的私有构造函数,则它就不可被实例化了。
因为显示构造函数是私有的,所以在该类的外部它是不可被访问的。假设该构造函数不被类自身从内部调用,就能保证该类永远不会被实例化,这种习惯有点违反直觉,好像构造函数就专门设计成不能被调用一样。所以,明智的做法是在代码中对于构造函数的作用增加一些注释。
这种习惯用法也有副作用,它使得一个类不能被子类化。所有的构造函数都必须要调用一个可访问的超类(superclass)构造函数,无论显示地或隐式地调用,在这种情形下,子类就没有可以访问的构造函数来调用了。
分享到:
相关推荐
本文实例分析了ASP.NET私有构造函数用法。分享给大家供大家参考。...虽然私有构造函数不允许外部方法实例化这个类,但却允许此类中的公共方法(有时也称为工厂方法,factory method)创建对象。也就是说,类可
私有构造函数 私有构造函数是一种特殊的实例构造函数。它通常用在只包含静态成员的类中。如果类具有一个或多个私有构造函数而没有公共构造函数,...但是,通常显式地使用 private 修饰符来清楚地表明该类不能被实例化。
只有当类不包含显式构造方法时,才会生成一个默认构造方法,因此可以通过包含一个私有构造方法来实现类的非实例化:// 不可实例化的程序类// 禁止默认构造函数以实现
4.私有构造函数:则无法通过该构造函数实例化该对象,可通过调用静态函数来实例化;当仅用作某些静态成员或属性的容器时,可定义私有构造函数来防止被实例化; 一般的构造函数都是实例构造函数,只要创建实例,就...
注意,如果您不对构造函数使用访问修饰符,则在默认情况下它仍为私有构造函数。但是,通常显式地使用 private 修饰符来清楚地表明该类不能被实例化。 示例代码: 代码如下:public class PrivateConClass{private ...
构造函数是一种可初始化其类的实例的成员函数。构造函数具有与类相同的名称,没有返回值。构造函数可以具有任意数量的参数,类可以具有任意数量的重载构造函数。构造函数可以具有任何可访问性(公共、受保护或私有)...
定义一个圆类circle,它有一个变量radius(半径)。从键盘输入数据,通过构造函数的参数传递给radius,编程计算并输出圆的的周长和面积。但是,必须确保输入的数据不为复数。
(3)类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数 (4)静态构造函数是不可继承的,而且不能被直接调用。 (5)如果类中包含用来开始执行的...
4.1用构造函数确保初始化 4.2用析构函数确保清除 4.3清除定义块 4.3.1for循环 4.3.2空间分配 4.4含有构造函数和析构函数的stash 4.5含有构造函数和析构函数的stack 4.6集合初始化 4.7缺省构造函数 4.8小结 4.9练习 ...
(3) 虚基类子对象是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的。 (4) 最远派生类是指在继承结构中建立对象时所指定的类。 (5) 派生类的构造函数的成员初始化列表中必须列出对虚基类构造函数的...
这种情况多出现在用一个通用的函数指针调用多个函数的场合,其中有些函数不需要函数指针声明中的所有参数。看下面的例子: int fun(int x,int y) { return x*2; } 尽管这样的用法是正确的,但大多数C和C++的...
——派生类需要自己的构造函数。 派生类中可以根据需要添加额外的数据成员和成员函数,甚至可以给予继承的原成员函数新的定义。... C++11增加了允许继承构造函数的机制,但派生类默认不能继承构造函数和析构
对于中高级程序员,本书也是不可或缺的参考书。本书的前言阐述了 第4版和前一版的不同之处。 【目录信息】 第1章 快速入门 1 1.1 编写简单的C++程序 2 1.2 初窥输入/输出 5 1.2.1 标准输入与输出对象 5 1.2.2 一个...
上面已经介绍过了,面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,所以 我们首先要做的就是如何来声明类,做出来一个类很容易,只要掌握基本的程序语法定义规则就可 以做的出来,那么难点在那里呢?...
常数据成员通过构造函数的成员初始化列表进行初始化 D.常数据成员可以在定义时直接初始化 10、运用运算符delete删除一个动态对象时( )。 A.系统首先为该动态对象调用构造函数,再释放其占用的内存 B.系统首先...
实例150 实例化Class类的5种方式 196 实例151 获得Class对象表示实体的名称 197 实例152 查看类的声明 198 实例153 查看类的成员 199 实例154 按继承层次对类排序 201 实例155 查看内部类信息 202 7.2 反射的进阶 ...
( c ) 可以在程序的任何地方 (d) 必须在其它函数中间 2.用C++语言编制的源程序要变为目标程序必须要经过( d )。 (a) 解释 (b) 汇编 (c) 编辑 (d) 编译 3.C++程序基本单位是( c )。 (a) 数据 (b) 字符 (c) ...