第五十九届冠军(使用C++设计一个类不能被继承)

第五十九届冠军(使用C++设计一个类不能被继承)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

称号:使用C++设计一个类不能被继承。
分析:这是Adobe 公司2007 的笔试题最新校园招聘。

应聘者的C++基本功底外,还能考察反应能力,是一道非常好的题目。


分析:C++中父类的构造函数会调用子类的构造函数,从这一点出发, 我们能够将子类的构造函数权限设为私有,这样父类构造函数在调用子类构造函数时就会出错。可是这样做有一个副作用。私有的构造函数使得我们无法正常创造这个类的对象。尽管能够通过像单例模式中那样通过提供一个静态函数调用私有构造函数产生一个类对象并返回其指针或者引用,但这样仅仅能产生堆上的对象而无法在栈上产生类的局部对象。

这里採用这样一种实现方法:

第五十九届冠军(使用C++设计一个类不能被继承)

使用一个具有私有构造函数的模板类FinalClassBase,FinalClass虚继承于该类,而且为该类的友元,因此FinalClass有权限调用基类的构造函数。这里FinalClass虚继承于FinalClassBase。所以以后全部试图继承FinalClass的派生类。必须在他们的构造函数里直接调用虚基类FinalClassBase的构造函数,此时就会由于没有对应的訪问权限而出错(图中提示不可訪问)。从而限制了FinalClass为一个不能被继承的类,满足了题目的要求。



版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117328.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Docker安装Rabbitmq3.8.7[通俗易懂]

    Docker安装Rabbitmq3.8.7[通俗易懂]Docker环境下安装Rabbitmq一、简介什么是rabbitmq:RabbitMQ是一套开源(MPL)的消息队列服务软件,是由LShift提供的一个AdvancedMessageQueuingProtocol(AMQP)的开源实现,由以高性能、健壮以及可伸缩性出名的Erlang写成。官网地址:https://www.rabbitmq.com/二、环境准备LInux环境:Centos7Docker版本:17.12.0-ce预装MQ版本:3.8.7SS

    2022年5月23日
    43
  • python2 手动安装更新pip

    python2 手动安装更新pip

    2021年10月22日
    108
  • pycharm导入下载好的库_如何在pycharm导入库

    pycharm导入下载好的库_如何在pycharm导入库

    2022年8月28日
    2
  • redis缓存与数据库一致性问题解决[通俗易懂]

    redis缓存与数据库一致性问题解决[通俗易懂]redis缓存与数据库一致性问题解决更多干货分布式实战(干货)springcloud实战(干货)mybatis实战(干货)springboot实战(干货)React入门实战(干货)构建中小型互联网企业架构(干货)一、需求起因假设先写数据库,再淘汰缓存:第一步写数据库操作成功,第二步淘汰缓存失败,则会出现DB中是新数据,Cache中是旧数据,数据不一致【如下图:db中是新数据,cache…

    2022年5月31日
    48
  • java数组的三种初始化方式

    java数组的三种初始化方式2018年4月3日Java语言中数组必须先初始化,然后才可以使用。所谓初始化就是为数组的数组元素分配内存空间,并为每个数组元素附初始值。注意:数组完成初始化后,内存空间中针对该数组的各个元素就有个一个默认值:           基本数据类型的整数类型(byte、short、int、long)默认值是0;           基本数据类型的浮点类型(float、double)默认值是0.0; …

    2022年5月5日
    48
  • 旷望(2018年党建工作)

    全球计算机视觉顶会CVPR2018(ConferenceonComputerVisionandPatternRecognition,即IEEE国际计算机视觉与模式识别会议)将于6月18日至22日在美国盐湖城举行。作为大会钻石赞助商,旷视科技Face++研究院也将在孙剑博士的带领下重磅出席此次盛会。而在盛会召开之前,旷视将针对CVPR2018收录论文集中进行系列解读。…

    2022年4月10日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号