0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C++为什么要阻止实例化

电子工程师 来源:学益得智能硬件 作者:学益得智能硬件 2022-08-09 09:34 次阅读
为什么要阻止实例化 一个类不想被实例化通常有两种情况:一种是抽象类,一种是工具类。 抽象类 比如现在需要计算图形的面积,可以是正方形、长方形、圆形等等。 于是抽象出了基类,叫图形。
class Sharp{};
classCircle:public Sharp{};
class Rectangle : public Sharp{};
Sharp作为抽象基类,也不好计算其面积,所以没有实例化的必要。 工具类 比如我们在QT中经常遇到的代码:
QFileDialog::getOpenFileName(this,"选择一个文件", QCoreApplication::applicationFilePath(),"*.cpp");
很多情况下我们只是需要通过函数 getOpenFileName 来获得当前文件的路径,没必要去创建对象。当然这里只是举个例子,并不是说 QFileDialog 是工具类。 还有这样一种情况,我们需要一个类来封装加、减、乘、除。
class Calculate{public:    static int add(int x, int y);static intsub(intx,inty);static intmul(int x, int y);static int div(int x, int y);};

上面这个类就是一个典型的工具类,用它创建对象没有意义,可以直接通过类名调用静态成员函数。 如何阻止 方法一:类中包含纯虚函数。 还是上面的Sharp类。
classSharp{public:    virtual void get_s() = 0;    //纯虚函数};

纯虚函数没有函数体。 含有纯虚函数的类叫抽象类。 抽象类不好创建对象,因为就算是创建了对象,调用纯虚函数的时候,也不知道如何执行。 方法二:构造函数私有 还是上面的计算类。
class Calculate{private:Calculate();public:    static int add(int x, int y);    static int sub(int x, int y);    static int mul(int x, int y);    static int div(int x, int y);};

把构造函数设置成私有,就不能在类的外部创建对象,相当于间接的阻止了该类实例化对象。

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    3868

    浏览量

    61308
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72900

原文标题:面试题:C++如何阻止类被实例化?

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C/C++代码动态测试工具VectorCAST插桩功能演示#代码动态测试 #C++

    C++代码
    北汇信息POLELINK
    发布于 :2024年04月18日 11:57:45

    鸿蒙OS开发实例:【Native C++

    使用DevEco Studio创建一个Native C++应用。应用采用Native C++模板,实现使用NAPI调用C标准库的功能。使用C标准库hypot接口计算两个给定数平方和的平方根。在输入框中输入两个数字,点击计算结果按钮显示计算后的数值。
    的头像 发表于 04-14 11:43 687次阅读
    鸿蒙OS开发<b class='flag-5'>实例</b>:【Native <b class='flag-5'>C++</b>】

    请问CubeIDE如何支持C++的开发?

    CubeIDE如何支持C++的开发。有没有一些例程。
    发表于 03-25 06:22

    什么是C++虚函数? 应该怎么定义? 用途是什么?

    什么是C++虚函数? 应该怎么定义? 主要用途是什么?
    发表于 11-08 06:58

    C++程序设计精简版

    总 目 录第 1 篇 基 本 知 识 第 1 章 C++的初步知识第 2 章 数据类型与表达式 第 2 篇 面向过程的程序设计第 3 章 程序设计初步第 4 章 函数与预处理第 5 章 数组第 6
    发表于 10-09 07:26

    高质量CC++编程指南

    林锐-高质量CC++编程指南电子档
    发表于 10-07 07:14

    嵌入式C/C++语言精华文章集锦

    /C++编程中,我们经常传送的不是简单的字节流(char型数组),而是多种数据组合起来的一个整体,其表现形式是一个结构体。 经验不足的开发人员往往将所有需要传送的内容依顺序保存在 char 型数组中,通过
    发表于 09-25 08:00

    STM32cubeide支持c++怎么配置?

    STM32cubeide支持c++怎么配置
    发表于 09-20 07:17

    Arm C/C++编译器22.1版开发人员和参考指南

    提供帮助您使用ARM®编译器Linux版的ARM®C/C++编译器组件的信息。 ARM®C/C++编译器是一款自动矢量化的Linux空间C
    发表于 08-11 07:46

    Arm C/C++编译器开发人员和参考指南

    提供帮助您使用Arm®编译器Linux版的Arm®C/C++编译器组件的信息。Arm®C/C++编译器是一款自动向量化的Linux空间C
    发表于 08-10 06:17

    如何为Arm编译Cc++代码

    编写CC++应用程序时,需要使用编译器工具链将其编译为机器代码。然后,您可以在基于Arm的处理器上运行此编译的可执行代码,或者使用模型对其进行模拟。 裸机编译编译器工具链包括以下组件: •将C
    发表于 08-02 17:28

    一起探索C++的世界!

    C++
    YS YYDS
    发布于 :2023年07月07日 19:10:25

    用OpenVINO™ C++ API编写YOLOv8-Seg实例分割模型推理程序

    本文章将介绍使用 OpenVINO 2023.0 C++ API 开发YOLOv8-Seg 实例分割(Instance Segmentation)模型的 AI 推理程序。本文 C++ 范例程序的开发环境是 Windows + V
    的头像 发表于 06-25 16:09 740次阅读
    用OpenVINO™ <b class='flag-5'>C++</b> API编写YOLOv8-Seg<b class='flag-5'>实例</b>分割模型推理程序

    如何为xtensa编译C++

    我想为 xtensa 编译简单的 C++ 代码,但我不能。 代码:全选#include \"ets_sys.h\" #include \"osapi.h\"
    发表于 06-09 07:02

    Java调用C/C++动态库dll操作串口实例

    大家好,今天分享的是使用C/C++编写一个读取串口数据的代码,然后将其编译成Windows下的动态链接库(.dll文件),然后写一个简单的java demo来调用C/C++接口。
    的头像 发表于 05-23 15:41 667次阅读
    Java调用C/<b class='flag-5'>C++</b>动态库dll操作串口<b class='flag-5'>实例</b>