博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++设计一个无法被继承的类
阅读量:6412 次
发布时间:2019-06-23

本文共 750 字,大约阅读时间需要 2 分钟。

要求是该类不能被继承,但是能够像正常的类一样使用。那么一下方法就不符合题目要求:

1、构造函数和析构函数设置为private。这样就不能定义一个类的实例

2、类似于那样,定义一个静态函数(或友元函数)来生成类的实例。这样只能通过new在堆上创建类

 

可以如下设计这个类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class 
Base
{
private
:
    
Base() {}
    
~Base() {}
    
friend 
class 
FinalClass;
};
 
class 
FinalClass :
virtual 
public 
Base
{
};
 
int  
main()
{
    
FinalClass  *p =
new 
FinalClass; 
//堆上对象
    
FinalClass  fs;                
//栈上对象
}

 

(1)FinalClass 是Base的友元,因此FinalClass可以访问Base中设置为private的构造函数和析构函数,因此FinalClass可以被构造                                                

(2)如果有某个类X尝试去继承FinalClass,那么X在构造的时候必须要构造Base,并且由于是FinalClass是虚拟继承自Base,X不能通过FinalClass的构造函数来构造Base,它必须直接构造Base,但是由于Base的构造函数是private的,所以X不能被构造

 

在c++11中引入了关键字final,可以更简单的实现,这样FinalClass就不能被继承了

class FinalClass final 

    { 
    };

本文转自tenos博客园博客,原文链接:http://www.cnblogs.com/TenosDoIt/p/3641943.html,如需转载请自行联系原作者
你可能感兴趣的文章
C#基础知识整理:基础知识(10) 静态
查看>>
MongoDB实战(1)MongoDB安装与存储结构
查看>>
sccm 2007 r2 step by step 之十八 报表-报表点
查看>>
FreeMarker中调用Java方法的实现
查看>>
Kubernetes & Docker 容器网络终极之战
查看>>
DVWA系列之15 文件包含漏洞利用
查看>>
puppet on windows
查看>>
10个最酷的linux单行命令
查看>>
Windows 10 技术预览版
查看>>
Linux还是亲生的好,实战自制Linux操作系统
查看>>
Using Half-NAT Mode Load Balancer In Solaris 11
查看>>
分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(2月27日-3月4日)
查看>>
【基础】华为设备链路捆绑大全实战精简版
查看>>
rpm包指定安装路径
查看>>
ORACLE 分区与索引
查看>>
酷暑下的发烧有感
查看>>
Nginx启动脚本
查看>>
利用Ossim系统进行主机漏洞扫描
查看>>
面试总结小谈
查看>>
挑战JavaScript正则表达式每日两题(2)
查看>>