设计一个类不能被继承

1.设计一个类不能被继承

我们知道,一个类不能被继承,即构造不出来对象,在继承体系中:

public继承:基类的public成员在派生类中仍为public成员;基类的protected成员在派生类中为protected成员;基类的私有成员,派生类不可见;

protected继承:基类的public成员在派生类中变为protected成员;基类的protected成员在派生类中为protected成员;基类的私有成员,派生类不可见;

private继承:基类的public成员在派生类中变为private成员;基类的protected成员在派生类中也为private成员;基类的私有成员,派生类不可见;

由于派生类在构造对象是,必须调用其构造函数,并且在调用其自己的构造函数的初始化列表中也会调用基类的构造函数,如下代码:

class AA
{
public:
    AA()
    {
        cout<<"AA()"<<endl;
    }
protected:
    int _a;
};
class BB:public AA
{
public:
    BB()
    {
        cout<<"BB()"<<endl;
    }
private:
    int _b;
};

void test()
{
    BB b;
}

构造时将会在BB的构造函数中调用AA的构造函数,在编译器看来,BB的构造函数如下:

BB()
    :AA()            //在BB的构造函数的初始化列表中调AA的构造函数
{
    cout<<"BB()"<<endl;
}``

从而,进一步探索要想继承下来的这个派生类可以构造出来对象,它必然满足可以在派生类的初始化列表中调用基类的构造函数,那么,如何才能使派生类调不到基类的构造函数呢???从上面的继承体系中,我们又发现不管是哪一种继承方式,其基类的私有成员在派生类中均不可见,即派生类无权限调用,因此,我们有这样一种思路,即将基类的构造函数权限设为私有,这样派生类就不能调用。

设计代码如下:
class AA
{
private:
    AA()
    {
        cout<<"AA()"<<endl;
    }
};

简言之,只有基类的构造函数为私有,即这个类是不能被继承的。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值