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

条件:用C++写一个不能被继承的类,但这个类既可以在栈上实例化也可以在堆上实例化。


如果一个类不能被继承,我第一想到的是这个类的构造函数为private.如果要可以在堆上实例化,我就想到使用静态成员函数模拟构造函数的功能,内部创建堆上对象,返回这个对象的指针。再使用静态成员函数负责释放动态分配的对象。使用静态成员函数也可以创建静态数据区上的对象。但是这种方法不能在栈上实例化。所以方法不行,继续想!


用继承可以么?我先定义一个类A,类A的构造函数声明为private,并声明类B为类A 的友元类。这样B类就可以继承A类了,但是我们是要写一个不能被继承的类。所以我们必须使用虚拟继承来继承类A。如果有一个类继承类B的话,构造对象时必须直接调用虚基类A 的构造函数来初始化对象的基类A部分,并要初始化虚基类表指针,但是类A的构造函数为private不能被该类使用,所以这个类无法顺利的创建对象,因此不能继承类B。


示例代码如下:

#include<iostream>
using namespace std;
template <typename T> 
class Base
{
    friend T;
private:
    Base() {}
    ~Base() {}
};

class Finalclass : virtual public Base<Finalclass>
{                
public:
    Finalclass() {}
    ~Finalclass() {}
};
void  main()
{
    Finalclass  *p = new Finalclass;  //堆上对象
    Finalclass  fs;                 //栈上对象
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值