【12】设计一个不能被继承的类

题目:用C++实现一个不能被继承的类

思路:1. 在C++中如果一个类能够被继承,那么子类的对象在构造的时候会先调用父类的构造函数,再执行自己的构造函数。子类对象在销毁的时候会先调用本身析构函数再调用父类析构函数

           2. 如果我们把一个类的构造函数和一个类的析构函数权限设置为private,那么当一个类试图去继承的时候会报错,可以达到不能被继承的效果

           3. 怎么得到类的实例呢?和单例模式类似,我们可以采用静态成员函数来得到类的实例,销毁和时候也直接利用类的静态成员函数,因为静态成员函数属于类。

class A{
public:
	static A* GetInstance(void);
	static void DeleteInstance(A **instance);
private:
	A(void){}
	~A(void){}
};

//实现静态成员函数
A* A::GetInstance(void){
    return new A();
}

void A::DeleteInstance(A **instance){
    delete (*instance);
	(*instance) = NULL;
}

int main(){
	//样例
	A *instance = A::GetInstance();
	A::DeleteInstance(instance);
	instance = NULL;
	return 0;
}
时间: 2024-11-02 22:25:40

【12】设计一个不能被继承的类的相关文章

用C++设计一个不能被继承的类

在Java 中定义了关键字final,被final修饰的类不能被继承. 首先想到的是在C++中,子类的构造函数会自动调用父类的构造函数.同样,子类的析构函数也会自动调用父类的析构函数.要想一个类不能被继承,只要把它的构造函数和析构函数都定义为私有函数.那么当一个类试图从它那继承的时候,必然会由于试图调用构造函数.析构函数而导致编译错误. 可是这个类的构造函数和析构函数都是私有函数了,怎样才能得到该类的实例呢?可以通过定义静态来创建和释放类的实例.基于这个思路,可以写出如下的代码: ///////

探讨C++实现一个不可被继承的类

C#和Java都提供了一种机制让一个类不能被继承,如C#中的sealed关键字和Java的final关键字,然而C++程序员就没这么好命了.不过C++也可以模拟出这种效果,原理基于:子类的构造函数会自动调用父类的构造函数,同理析构函数也是一样.如果父类的构造函数和析构函数被设为私有的话,那么子类就无法调用,也就达到了父类不可被继承的目的了.原理很简单,按此原理我也实作出一个自认为很实用的工具类,在此献下丑,欢迎大家批评: template< typename TDerive, typename

设计一个只能在堆上或栈上实例化的类

一道C++笔试题:设计一个只能在堆内存上实例化的类和一个只能在栈内存上实例化的类 只能在堆内存上实例化的类:将析构函数定义为private,在栈上不能自动调用析构函数,只能手动调用.也可以将构造函数定义为private,但这样需要手动写一个函数实现对象的构造. 只能在栈内存上实例化的类:将函数operator new和operator delete定义为private,这样使用new操作符创建对象时候,无法调用operator new,delete销毁对象也无法调用operator delete

编程-设计一个类用来表达两张牌的牌组,设计这个类的初始化方式

问题描述 设计一个类用来表达两张牌的牌组,设计这个类的初始化方式 设计一个类表达一组牌,设计牌组的初始化方式 //牌值 private string face; //花色 private string suit; public zupai(string suit, string face) { this.face = face; this.suit = suit; } //牌子 public string getFace() { return face; } //花色 public string

如何设计一个可用的类?

问题描述 如题,如何设计一个可用的类.可用主要说的是良好工作的.优质的类.麻烦高手说明一下设计类时应该注意的事项,或者一些经验之谈.谢谢! 解决方案 解决方案二:这可老鼻子了.面向对象,设计模式,猪多概念解决方案三:自己看书吧!~解决方案四:就比如说数据操作类吧就先写最基本的吧然后在写+条件变成重载的.功能就扩展了这个只是我个人这么认为的.不知道对不对解决方案五:up解决方案六:虽然被说的很烂了,但是我认为通过测试驱动设计,以及不要过度设计的类就是个很不错的设计方式了,很多时候这个是靠经验来的,

新手-设计一个用于管理的人员类

问题描述 设计一个用于管理的人员类 设计一个用于人事管理的People(人员)类 考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号).sex(性别).birthday(出生日期).id(身份证号)等.其中"出生日期"声明为一个"日期"类内嵌子对象.用成员函数实现对人员信息的录入和显示.要求包括:构造函数和析构函数.拷贝构造函数.内联成员函数.类的组合. 解决方案 http://blog.sina.com.cn/s/blog_718f727801

c++在运行期间不会自动检查数组是否越界,设计一个类检查数组是否越界

/* c++在运行期间不会自动检查数组是否越界,设计一个类检查数组是否越界. */ #include <iostream> #include <string> using namespace std; class check { public: check(char*s) { str=new char[strlen(s)+1]; strcpy(str,s); len=strlen(s); } char operator[](int n) { if(n>len-1) { cou

如何设计一个编辑窗体的基类

为什么我们需要一个编辑的基类呢? 我们发现对于编辑窗体而言,它们的工作基本的流程是大同小异,而且编辑窗体中每次都需要增加按键处理.是否有编辑内容未保存等提示,因此我们需要一个基类来把这些基本的事情完成. 下面,我们看看是如何实现这个基类的. 通用界面与基本的流程 通用的界面 我们的编辑界面通常是在一个列表界面中,通过点击添加或者编辑按钮,打开一个编辑窗体,他们通常长成下面的这个样子: 基本的流程 我们总结一下基本的流程是下面这样的: 基类的基本实现 构造函数 public EditFormBas

WAP设计基础:到底该如何设计一个WAP站点

文章描述:到底该如何设计一个WAP站点. WAP站点,这似乎是一个有点落伍的东西.在诞生之初,它很简陋,只能通过一个叫WML的标记语言来搭建没有任何美感的文字+链接页面.而今,绝大部分WAP站点都开始使用xhtml标记语言,不过在iOS.Android风潮席卷全球的今天,这个演进似乎显得有点苍白无力.但在中国,WAP的用户群体依然是移动设备上网的绝对主力军.那么,到底该如何设计一个WAP站点呢?个人以为,需要从设备.浏览器.任务.场景四个方面入手.一个WAP站点好与坏,不取决于页面的绚丽程度,不