当前位置: 首页 > article >正文

开发笔记4

1: 关于接口类的编写规范:

class IExample {
	public:
    	virtual void doSomething() = 0;
    	virtual ~IExample() {}  // 虚析构函数
};

  • 构造函数一般情况下不需要
    虽然不需要构造函数,但是编译器还是会默认生成一个, 这个和抽象类不能实例化没有必然联系。(所以构造函数使用delete 是不对的)
    个人理解:抽象类默认有构造函数 编译器会检测类中是否有纯虚函数, 检测有纯虚函数, 就会阻止实例化

  • 析构函数通常是需要的, 最好是虚函数

     确保在通过基类指针删除派生类对象时,能够正确调用派生类的析构函数,防止内存泄漏
    

当你试图将抽象类(含有纯虚函数的类)的构造函数定义为 delete 时,编译器会报错:

在 C++ 中,当你构造一个派生类对象时,首先会调用基类的构造函数。因此,如果基类(抽象类)没有有效的构造函数,派生类也无法被构造。 虽然抽象类不能被实例化,但基类构造函数仍然是派生类构造函数的一部分。如果基类构造函数被删除了(= delete),这会导致派生类的构造变得不可行,因此编译器会报错。

2: qobject_cast 和 dynamic_cast 转换类型的区别:

qobject_cast :

在 Qt 中,qobject_cast 是一个特定的类型转换函数,用于将一个 QObject 类型的指针转换为其派生类的指针。它与 C++ 标准的类型转换(如 static_cast、dynamic_cast)有一些显著的区别和特点。让我们详细比较一下 qobject_cast 和其他常见类型转换(如 static_cast 和 dynamic_cast)的不同。

qobject_cast 是 Qt 提供的一个专门为 QObject 类设计的类型转换函数。它在进行类型转换时,依赖于 Qt 的 元对象系统(meta-object system)。qobject_cast 只能用于带有 Q_OBJECT 宏的类(即继承自 QObject 的类),并且它通常用于 跨类层次结构的类型转换。

  • 运行时类型识别:qobject_cast 使用了 Qt 的元对象系统,因此它在运行时能够识别类型。这意味着它支持 多态性 和 类型安全的转换。
  • 只适用于 QObject 类及其子类:只能用于具有 Q_OBJECT 宏的类,因此它与 Qt 的对象模型紧密相关。
  • 返回 nullptr:如果类型转换失败,qobject_cast 返回 nullptr,而不是抛出异常或其他机制。

dynamic_cast :

  • 多态转换:dynamic_cast 用于有虚函数的类之间的安全转换,即支持多态的类。
  • 基类到派生类(向下转换):需要确保基类对象实际指向派生类对象,否则转换失败并返回 nullptr(指针类型)或抛出异常(引用类型)。
  • 派生类到基类(向上转换):总是成功的,因为派生类包含基类的部分。

http://www.kler.cn/a/510605.html

相关文章:

  • 力扣hot100之螺旋矩阵
  • 通过图形界面展现基于本地知识库构建RAG应用
  • Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin
  • 如何在 Google Cloud Shell 中使用 Visual Studio Code (VS Code)?
  • 【Pytorch实用教程】TCN(Temporal Convolutional Network,时序卷积网络)简介
  • 128.最长连续序列
  • 二叉搜索树(TreeMapTreeSet)
  • fd与FILE---基础文件IO(关注我,教我写博客 -- 今天带了点颜色)
  • webpack 4 升级 webpack 5
  • 在三维坐标系中通过四阶矩阵实现平移和旋转
  • macos 搭建 ragflow 开发环境
  • 【机器学习:三十四、贝叶斯分类器:原理、方法及应用】
  • STL简述
  • 2025.1.15——四、布尔注入
  • MDPI的latex文档书写
  • 【数据结构】—— 顺序表的实现与优化:空间管理与增容策略
  • 使用Python开发PPT文本提取工具
  • Spring的Bean详解=Bean别名+作用范围+使用场景
  • 4.Proto 3 语法详解
  • opencv笔记2
  • htmlcssJavaScript网页开发:年会手机号抽奖案例
  • ANSYS FLUENT学习笔记(八)-实战案例-网格划分
  • 使用 CFX 中的标量传输方程对染料冲洗数值建模:以主动脉弓血流为例
  • python轻量级框架-flask
  • 【AI论文】生成式视频模型是否通过观看视频学习物理原理?
  • 【Linux】Linux入门(2)常见指令