zoukankan      html  css  js  c++  java
  • C++实现不能继承的类

    实现一个不能继承的类,这在Java等语言中是很好实现的,被final关键字修饰的类不能被继承。

    C++中没有类似的关键字,须自己实现。一般有如下两种方法:

    1、设置构造方法与析构方法为私有

    class FinalClass
    {
    public:
           static FinalClass * GetInstance()
    	{
    		return new FinalClass();
    	}
    	static void DestoryInstance(FinalClass *pClass)
    	{
    		delete pClass;
    	}
    private:
    	FinalClass()
    	{
    
    	}
    	virtual ~FinalClass()
    	{
    
    	}
    };
    

     由于定义构造方法与析构方法为私有,所以必须定义static方法来创建和释放类的实例。

    该方法的缺点:创建类的实例不方便,而且之间在堆上创建实例,而得不到栈上的实例。

    2、使用虚拟继承实现

    template <typename T> class MakeFinal
    {
    public:
    	friend T;
    private:
    	MakeFinal()
    	{
    	}
    	virtual ~MakeFinal()
    	{
    	}
    };
    
    class FinalClass2 : virtual public MakeFinal<FinalClass2>
    {
    public:
    
    	FinalClass2()
    	{
    	}
    	virtual ~FinalClass2()
    	{
    	}
    };
    

    这样实现的话,FinalClass2就不能被继承,如果继承该类就会导致编译不过。而且可以像使用普通类一样来使用该类,可以在栈与堆上创建实例。

  • 相关阅读:
    React组件传值(子传父)
    React里面的componentDidMount()钩子函数用法
    修改主键的值
    mysql 命令
    Android ContentResolver
    linux下vim命令详解
    26种基于PHP的开源博客系统
    [环境配置] 如何为Apache绑定多IP多域名
    display属性值
    link标签 rel="stylesheet"
  • 原文地址:https://www.cnblogs.com/cmranger/p/4367015.html
Copyright © 2011-2022 走看看