不能被继承的类

用C++ 设计一个不能被继承的类 分析:这是Adobe 公司2007 年校园招聘的最新笔试题。这道题除了考察应聘者的C++ 基本功底外,还能考察反应能力,是一道很好的题目。 在Java 中定义了关键字final ,被final 修饰的类不能被继承。但在C++ 中没有final 这个关键字,要实现这个要求还是需要花费一些精力。 首先想到的是在C++ 中,子类的构造函数会自动调用父类的构造函数。同样,子类的析构函数也会自动调用父类 阅读详情
题目:
用C++设计一个不能被继承的类。

分析:
一个类被继承后,在生成派生类对象时,派生类会主动调用父类的构造函数,所以如果父类的构造函数被设置成私有时,派生类的对象就无法构建。

一、直接将构造函数设为私有函数

class SealedClass
{
public:
    static SealedClass* GetInstance()
    {
        return new SealedClass();
    }

    static void DeleteInstance( SealedClass* pInstance )
    {
        delete pInstance;
    }

private:
    SealedClass() {}
    ~SealedClass() {}
};

class test : public SealedClass
{
};


int main( void )
{
//    test t;    
    return 0;
}

2.虚拟继承

template <typename T>
class MakeSealed
{
    friend T;

private:
    MakeSealed() {}
    ~MakeSealed() {}
};

class SealedClass2 : virtual public MakeSealed<SealedClass2>
{
public:
    SealedClass2() {}
    ~SealedClass2() {}
};

class Try : public SealedClass2
{};
用 C++ 设计一个不能被继承的类 <br /><br />分析:这是Adobe  公司 2007  年校园招聘的最新笔试题。这道题除了考察应聘者的<br />C++  基本功底外,还能考察反应能力,是一道很好的题目。 <br />在Java  中定义了关键字 final  ,被 final  修饰的类不能被继承。但在 C++  中没<br />有final  这个关键字,要实现这个要求还是需要花费一些精力。 <br />首先想到的是在 C++ 中,子类的构造函数会自动调用父类的构造函数。同样,<br />子类的析构函数也会自动调用父类的析构 阅读详情

相关推荐

C++ 设计一个不能被继承的类

吃饭时与“大姐”讨论问题,他问道“C++如何设计一个不能被继承的类”?不能被继承,那把构造函数和析构函数设计成私有的不就行了,这样一来子类不能访问父类的构造函数和析构函数,也就无法继承了。然而这样一来,这个类在其他地方也就不能实例化了,没有存在的意义了。这时候你是不是想到了静态方法,是啊,我们可以通过静态方法来返回类的实例,然后通过另一个静态方法来释放该类对象。代码如下://static funct

曲径通幽处 1635

继承与派生的的部分知识点整理(构造函数调用顺序,不能被继承的函数)

关于继承基类时,派生类的构造函数调用顺序如下: 1.在派生类构造函数中,先调用基类的构造函数,如果没有显式地调用,则程序会隐式地调用基类的构造函数。 2.在一个派生类自己的构造函数执行前,先初始化派生类的内部成员(基类构造函数也相同) 3.执行派生类具体的构造函数 C++派生类体系中,不能被派生类继承的有构造函数和析构函数。 派生类的构造函数会先显式(或隐式)地调用基类的构造函数 派生类不能继承基类的析构函数,需要通过派生类的析构函数去调用基类的析构函数 基类的清理工作仍然由基类的析构函数负责

m0_59303798的博客 1007

Dia 使用说明

简述 在linux上面能找到dia这个工具还是挺幸运的,因为之前画流程图总是使用ubuntu默认的word工具 在里面画图,感觉流程图使用起来麻烦,并且视觉效果真的不好看。 自从使用Dia后,感觉至少画起来流程图会变得越来越标准了。但是Dia也存在问题,就是使用的文档很少,使用中遇到为后,查起来比较费劲,但是至少问题不是很多,所以使用中遇到的几点问题我就记下来,和大家分享,加快大家的开发和文档整理能力。 我会按照遇到的问题来说,不存在使用的先后顺序。 1. Dia 去掉背景中的线条 首先去点那个大一点的蓝色

linan101的博客 4926

为什么C++赋值运算符重载函数不能被继承?

为什么C++赋值运算符重载函数不能被继承?(zz:http://www.cqumzh.cn/topic_show.php?tid=134570)这个问题曾经困扰过我一阵子。请先看一下下面的源代码:class A1{public:        int operator=(int a)        {                return 8;        }        int

2812

毫米波与太赫兹:十射线模型建模

Pt=1,只考虑地面和前后两面墙的反射,反射系数为0.7。用matlab设计程序并实现该功能。,总计考虑10条路径,求出接收功率随。

SupermarketX的博客 786

别急着编译!修复银河麒麟OpenSSH漏洞前,先搞懂ssh、sshd版本与apt仓库的“爱恨情仇”

本文深度解析银河麒麟OpenSSH漏洞(CVE-2023-38408)修复策略,揭示版本差异背后的企业级维护逻辑,提供从APT升级到源码编译的多维度方案评估。特别针对路径隔离方案和离线环境处理给出技术细节,帮助企业制定兼顾安全与稳定的升级决策框架。

weixin_26642481的博客 456

继承与多态

多态:不同对象在接受相同消息时产生的不同动作。 C++的多态行表现在运行和编译两个阶段: 运行时:多态性通过继承和虚函数来表示 虚函数:在基类中冠以virtual的成员函数,允许在派生类中对基类的虚函数重新定义; 纯虚函数:在基类中为其派生类保留一个函数的名字,以便派生类对其进行定义。不允许直接调用纯虚函数 从基类继承来的纯虚函数,在派生类中仍是虚函数,一个类至少有一个纯虚函数,这个类称为抽象类,抽象类必须用作派生其他类的基类,不能直接创建对象。 编译时:多态性体现在函数和运算符的重载上 ...

积少成多,水滴石穿 187

2024.6.10丨基于DIAMOND与VFDB数据库的致病菌毒力因子高效注释指南

本文详细介绍了基于DIAMOND与VFDB数据库的致病菌毒力因子高效注释方法,涵盖工具安装、参数优化、数据库选择及实战案例解析。通过DIAMOND的快速比对和VFDB的全面毒力因子数据,显著提升微生物基因组研究效率,适用于临床检测、食品安全监测等多个场景。

weixin_33712987的博客 376

C++继承详解_在c++中,不能被派生类继承的成员是

废话不多说直接上代码class 派生类名:[继承方式] 基类名{派生类新增加的成员继承方式限定了基类成员在派生类中的访问权限,包括 public(公有的)、private(私有的)和 protected(受保护的)。此项是可选项,如果不写,默认为 private(成员变量和成员函数默认也是 private)。现在我们知道,public、protected、private 三个关键字除了可以修饰类的成员,还可以指定继承方式。不同的继承方式会影响基类成员在派生类中的访问权限。

2401_84619432的博客 1069

Opencv2.4.9源码分析——HoughCircles

图形可以用一些参数进行表示,标准霍夫变换的原理就是把图像空间转换成参数空间(即霍夫空间),例如霍夫变换的直线检测就是在距离-角度空间内进行检测。圆可以表示成: (x-a)2+(y-b)2=r2                   (1) 其中a和b表示圆心坐标,r表示圆半径,因此霍夫变换的圆检测就是在这三个参数组成的三维空间内进行检测。 原则上,霍夫变换可以检测任何形状。但复杂的形状需要的

赵春江的专栏 3万+

HDMI2.1/eDP TX接口设计:

HDMI2.1向下兼容,HDMI2.1工作在FRL模式,HDMI2.0工作在TMDS模式。因此采用AC耦合电压模式驱动器。一般采用220nF,封装建议0201。,但是协议要求,往 CEC 管脚通过 27K 电阻加 3.3V 电压,漏电不允许超过。NOTE:如果只需要支持 HDMI2.0 及以下模式时, MOS管也不能省掉。DDC_SCL/DDC_SDA 协议规定是。HDMI2.0模式:配置为高,MOS导通。HDMI2.1模式:配置为低,MOS不导通。,必须增加电平转换电路。形成直流偏置,大约3V。

qq_40010777的博客 7866

C++类体系中,不能被派生类继承的有?

C++类体系中,不能被派生类继承的有? 构造函数不能被继承,但是可以被调用。派生类的构造函数在初始化列表中应调用基类的构造函数。 --------------------- 为什么C++赋值运算符重载函数不能被继承? 这个问题曾经困扰过我一阵子。请先看一下下面的源代码: class A1 { public: int perator=(int a) ...

南方以北 1万+

信息抽取实战:三元组抽取(限定领域 vs 开放领域)(附代码)

信息抽取实战:三元组抽取 目录信息抽取实战:三元组抽取一、限定领域的三元组抽取比赛介绍数据分析序列标注模型关系分类模型三元组提取总结开放领域的三元组抽取标注平台文本分类新数据进行三元组抽取总结参考文献 一、限定领域的三元组抽取   本项目将会介绍在2019语言与智能技术竞赛的三元组抽取比赛方面的一次尝试。由于该比赛早已结束,当时也没有参加这个比赛,因此没有测评成绩,我们也只能拿到训练集和验证集。但是,这并不耽误我们在这方面做实验。 比赛介绍   该比赛的网址为:http://lic2019.ccf.org.

南有芙蕖 2万+

C++定义不能被继承的类

C++的定义的类要求不能被继承,貌似最简单的想法是将构造函数定义为私有的,但事实上这样并不对,这会引发一个问题,用户如何实例化该类?因为友元关系是不能够被继承的,所以可以考虑友元+私有化构造函数来实现。 现在假设有一个class,叫Base,它不希望被继承,而且再假设有一个辅助类uninherit,Base是辅助类uninherit的友元,而且辅助类uninherit的构造函数是私有的,于是假定

学习笔记 4074

芒果YOLOv5改进55:损失函数篇之KLD:即插即用 芒果首发原创新颖|全网唯一更新KLD改进博客,通过 Kullback-Leibler 散度学习用于目标检测的高精度边界框,提升YOLOv5小目标

YOLOv5改进KLD损失函数:即插即用 原创新颖|芒果专栏独家首发

包括YOLOv5、YOLOv7、YOLOv8等模型改进 664

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

写一个不能被继承的类,且能正常使用

写一个不能被继承的类,且能正常使用 实验室同学今天面试,上来被问的第一个题就是”写一个不能被继承的类“ 这个问题分享出来的时候,我惊呆了,因为脑子没一点思路(这是什么鬼东西,项目里从来没有用过,课堂上也没听过,在博客、问答区也没遇见过)。C++里没有相关的语法定义,也没有特定的设计。冷静判断,觉得这应该就是设计模式一类的东西(这方面确实很欠缺)。不扯了,经过查阅资料,这题是Adobe 0...

weixin_30571465的博客 108

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

[C++]不能被继承的类

前面讲到,派生类的构造函数和析构函数会自动调用基类的构造函数和析构函数,那么要让一个类不能被继承,那么就将它的构造函数和析构函数私有函数(派生类可以访问保护函数)。那么怎样才能得到该类的实例呢? 这倒不难,可以通过定义公有的静态函数来创建和释放类的实例,实现该类不能被继承但能被实例化的功能。 1 #include"stdafx.h" 2 #include<iostre...

weixin_30666753的博客 115

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【C++】二十、多继承、虚继承、类中的内存布局、不能被继承的类

一、多继承 二、虚继承 三、类中的内存布局 (一)示例一:存在两个虚基类 (二)示例二:虚基类和虚函数同时存在 四、设计一个不能被继承的类 (一)模仿单例模式 (二)采用虚继承和友元实现

qq_43411555的博客 508

C++ 构造不能被继承的类

C++ 构造一个不能被继承的类 在Java里,有一个关键词final,用这个此定义的类时不能被继承的,但是在C++里并没有这个关键词,那么在此讨论下用什么方法可以实现。 涉及知识点: 1.      友元类 友元类可以访问私有成员 2.      虚继承 虚基类的构造函数由子类最终构造 3.      继承时候的行为 子类自动调用父类的构造函数和析构函数   解决方法描

霖林烟雨 965

如何设计一个不能被继承的类

如何设计一个不能被继承的类 思路: 子类的继承过程中哪些会和父类产生关系呢? #include<iostream> using namespace std; class A { public: A() { cout << "A()" << endl; } ~A() { cout << "~A()" << endl; } }; class B :public A { public: B() { cout <<

obstacles的博客 806

C++ 创建一个不能被继承的类

一、分析 在Java中定义了关键字final,被final修饰的类不能被继承。但在C++中没有final这个关键字。 首先想到的是在C++ 中,子类的构造函数会自动调用父类的构造函数。同样,子类的析构函数也会自动调用父类的析构函数。要想一个类不能被继承,我们只要把它的构造函数和析构函数都定义为私有函数。那么当一个类试图从它那继承的时候,必然会由于试图调用构造函数

Thinker.的专栏 731

如何让类不能被继承

方法一:借助 final 关键字,用该关键字修饰的类不能被继承。 #include <iostream> using namespace std; class Base final { }; class Derive: public Base{ // error: cannot derive from 'final' base 'Base' in derived type 'Derive' }; int main() { Derive ex; return 0; }

GoodLinGL的博客 1171

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

用C++设计一个不能被继承的类 分析:这是Adobe 公司2007 年校园招聘的最新笔试题。这道题除了考察应聘者的C++ 基本功底外,还能考察反应能力,是一道很好的题目。 在Java 中定义了关键字final ,被final 修饰的类不能被继承。但在C++ 中没有final 这个关键字,要实现这个要求还是需要花费一些精力。 首先想到的是在C++ 中,子类的构造函数会自动调用父类的构造

clayruan的专栏 821

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

利用友元函数不能被继承的特性,可以实现这样的类 主要思想:设计一个模板辅助类Base,将构造函数声明为私有的;再设计一个不能被继承的类FinalClass,将FinalClass作为Base的友元类。将FinalClass虚继承Base。 #include <iostream> using namespace std; template <typename T> cl...

weixin_41289588的博客 407

不能被继承的类[C/C++/C#]

From: http://zhedahht.blog.163.com/blog/static/25411174200793181548842/ 题目:用C++设计一个不能被继承的类。 分析:这是Adobe公司2007年校园招聘的最新笔试题。这道题除了考察应聘者的C++基本功底外,还能考察反应能力,是一道很好的题目。 在Java中定义了关键字final,被final修饰的类不能

Vast_Sea的专栏 1457

实现一个不能被继承的类

题目:用C++设计一个不能被继承的类 不能被继承?不能被继承?不能被继承?按照继承的理论知识分析,我们只要把类的构造函数设置为私有的,即可解决问题。 因为那样的话,子类就没有办法访问基类的构造函数,从而就阻止了进行子类构造对象的任务实现,也就达到了不可继承的目的。 但是,假设那样,这个类我们在其它地方怎么使用呢?那这样子给我们的利用也造成了一定的障碍。如何解决? 可以定义静态方法(静态方法可以不用...

Nameseven的博客 269
上一篇: 不用加减乘除做加法
下一篇: 把字符串转换为整数
Findway_
博客等级 码龄10年 36粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值