创建一个不能被继承的类并能够正常使用

个人博客传送门

题目:

题目很简单,就是创建一个不能够被继承的类,同时能够正常使用。

思路:
  • 题目分为两部分组成,第一个是不能被继承的类。类如果要不能被继承,那么子类肯定不能够调用基类的构造函数或者析构函数。那么我们只要将构造函数或析构函数定义为私有成员函数就好了。
  • 第二个要求,能够正常使用,这样显然之前的方式是行不通的。构造函数为私有了,就无法创建对象了。那我再给他加一个友元函数,这样对象也可以创建了。
  • 可是题目的要求是正常使用这个类,显然通过一个友元函数是不符合我们正常使用类的方式。
  • 这个时候,正真正确的思路就出来了。我们借用一个中间类。例如:我们不能被继承的类是man,我们创建一个 私有构造函数的父类person,同时将 man定义为person的友元类。这样man就可以正常访问person的私有构造函数了。接着我们让 man虚继承person,到这里我们就完成了这个题目。
  • 让man虚继承person是为了让继承man的类,都需要在man的父类,即person中调用构造函数,但只有man是person的友元类,其他的类都不能访问person的构造函数。因此man就成为了不能被继承的类,而man本身可以正常使用。
代码如下:
include <iostream>

using namespace std;
//设计一个不能被继承的类
class person{
    public:
        friend class man;
    private:
        //构造函数为private
        person(){}
};
//man虚拟继承person
class man:virtual public person {
    public:
        man(){
            age = 18;
        }
        void show(){
            cout << age << endl;
        }
    private:
        int age;
};

// class son:public man{
//  public:
//      son(){}
// };

int main(){
    man bob;
    system( "clear" );
    bob.show();
    //son tom;
    return 0;
}

不定义man的继承类son,正常输出man的age = 18
不能被继承的类

定义man的继承类son失败
不能被继承的类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值