Qt_纯虚函数的信号和槽

简介

  • 在C++中,纯虚函数是一个在基类中声明但没有实现的虚函数。纯虚函数的声明以 “= 0” 结尾。纯虚函数的目的是为了提供一个接口,但是不提供实现。派生类必须实现纯虚函数,否则它也会成为一个抽象类。纯虚函数可以在基类中定义,也可以在派生类中定义。
  • 纯虚函数用于创建抽象类,抽象类不能直接创建对象,只能作为基类来为派生类提供接口。派生类必须实现纯虚函数,否则派生类也会成为抽象类。
引入原因
  • 为了实现C++的多态
抽象类
  • 包含纯虚函数的类称为抽象类。
  • 抽象类是一种特殊的类,它是为了抽象和设计的目的为建立的,它处于继承层次结构的较上层。
抽象类的作用
  • 抽象类的主要作用作为接口,由它来为派生类提供一个公共的根,在派生类中具体实现。
  • 所以派生类实际上刻画了一组子类的操作接口的通用语义,这些语义也传给子类,子类可以具体实现这些语义,也可以再将这些语义传给自己的子类。
使用抽象类时注意:
  • 抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。
  • 如果派生类中没有重新定义纯虚函数,而只是继承基类的纯虚函数,则这个派生类仍然还是一个抽象类。
  • 如果派生类中给出了基类纯虚函数的实现,则该派生类就不再是抽象类了,它是一个可以建立对象的具体的类。

示例代码如下:

#include <iostream>
using namespace std;class Shape {protected:int width, height;public:virtual int area() = 0; // 纯虚函数void setWidth(int w) {width = w;}void setHeight(int h) {height = h;}
};class Rectangle: public Shape {public:int area() {return width * height;}
};class Triangle: public Shape {public:int area() {return (width * height) / 2;}
};int main() {Rectangle rect;Triangle tri;rect.setWidth(5);rect.setHeight(7);cout << "矩形的面积:" << rect.area() << endl;tri.setWidth(5);tri.setHeight(7);cout << "三角形的面积:" << tri.area() << endl;return 0;
}

在上面的示例中,Shape是一个抽象类,它有一个纯虚函数area()。Rectangle和Triangle是Shape的派生类,它们必须实现纯虚函数area()。在main函数中,我们创建了Rectangle和Triangle的对象,并调用它们的area()函数来计算面积。

Qt_纯虚函数的信号和槽

在这里插入图片描述

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);Obj = new BClass();QObject::connect(Obj, &AClass::signalPureVirtualFunction, [&](){std::cout << "in 1" << std::endl;});
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{Obj->pureVirtualFunction();
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <iostream>
QT_BEGIN_NAMESPACE
namespace Ui
{class MainWindow;
}
QT_END_NAMESPACEclass AClass : public QObject
{Q_OBJECT
public:virtual void pureVirtualFunction() = 0;signals:void signalPureVirtualFunction();
};class BClass : public AClass
{Q_OBJECT
public:void pureVirtualFunction() override{std::cout << "send" << std::endl;emit signalPureVirtualFunction();}
};class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;AClass *Obj;
};
#endif // MAINWINDOW_H

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/701595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity驱动3d模特跳舞 穿模问题 穿透

是的&#xff0c;这个问题在3D建模和动画领域通常被称为“穿模”&#xff08;Clipping&#xff09;或“穿透”&#xff08;Penetration&#xff09;。更具体 用unity驱动3d模特跳舞&#xff0c;手会穿过衣服 当使用Unity驱动3D模特跳舞时&#xff0c;手部穿过衣服的问题通常是…

python中的类与对象(1)

目录 一. 引子&#xff1a;模板 二. 面向过程与面向对象 &#xff08;1&#xff09;面向过程编程 &#xff08;2&#xff09;面向对象编程 三. 对象与类 &#xff08;1&#xff09;对象 &#xff08;2&#xff09;类 四. 面向对象程序设计的特点&#xff1a;封装&#…

[c++] 记录一次引用使用不当导致的 bug

在工作中看到了如下代码&#xff0c;代码基于 std::thread 封装了一个 Thread 类。Thread 封装了业务开发中常用的接口&#xff0c;比如设置调度策略&#xff0c;设置优先级&#xff0c;设置线程名。如下代码删去了不必要的代码&#xff0c;只保留能说明问题的代码。从代码实现…

【C语言】linux内核ipoib模块 - ipoib_ib_handle_rx_wc

一、中文注释 // 定义一个处理InfiniBand接收完成工作请求的函数 static void ipoib_ib_handle_rx_wc(struct net_device *dev, struct ib_wc *wc) {// 通过网络设备获取私有数据结构struct ipoib_dev_priv *priv ipoib_priv(dev);// 获取工作请求ID&#xff0c;并屏蔽掉接收…

探索未来:Web3如何改变我们的生活方式

在数字化的时代&#xff0c;技术的不断发展和创新已经成为了我们生活的常态。而在这个不断变革的过程中&#xff0c;区块链技术作为一种颠覆性的技术&#xff0c;正逐渐成为人们关注的焦点。作为区块链技术的下一代&#xff0c;Web3正日益崭露头角&#xff0c;成为了未来的发展…

橘子学es原理01之准备工作

es本身是具备很好的使用特性的&#xff0c;我指的是他的部署方面的&#xff0c;至于后期的使用和运维那还是很一眼难尽的。 我们从这一篇开始就着重于es的一些原理性的的一些探讨&#xff0c;当然我们也会有一些操作性的&#xff0c;业务性的会分为多个栏目来写。比如前面我写的…

Flutter开发进阶之Package

Flutter开发进阶之Package 通常我们在Flutter开发中需要将部分功能与整体项目隔离&#xff0c;一般有两种方案Plugin和Package&#xff0c;Application是作为主体项目&#xff0c;Module是作为原生项目接入Flutter模块。 当独立模块不需要与原生项目通讯只需要Plugin就可以&a…

【广度优先搜索】【网格】【割点】1263. 推箱子

作者推荐 视频算法专题 涉及知识点 广度优先搜索 网格 割点 并集查找 LeetCode:1263. 推箱子 「推箱子」是一款风靡全球的益智小游戏&#xff0c;玩家需要将箱子推到仓库中的目标位置。 游戏地图用大小为 m x n 的网格 grid 表示&#xff0c;其中每个元素可以是墙、地板或…

计算几何相关算法汇总

目录 1 专题说明2 算法参考 1 专题说明 本专题用来记录计算几何相关算法&#xff0c;包括&#xff1a; 求两个矩形的交集。 2 算法 算法&#xff1a;求两个矩形的交集 C实现&#xff0c; // 定义矩形结构体 struct Rectangle {int x1, y1; // 左下角坐标int x2, y2; // 右…

利用LaTex批量将eps转pdf、png转eps、eps转png、eps转svg、pdf转eps

1、eps转pdf 直接使用epstopdf命令&#xff08;texlive、mitex自带&#xff09;。 在cmd中进入到eps矢量图片的目录&#xff0c;使用下面的命令&#xff1a; for %f in (*.eps) do epstopdf "%f" 下面是plt保存eps代码&#xff1a; import matplotlib.pyplot as…

javafx环境搭建

参考链接 使用上述参考搭建javafx环境。

ABC342A-E题解

文章目录 A题目AC Code&#xff1a; B题目AC Code&#xff1a; C题目AC Code&#xff1a; D题目AC Code&#xff1a; E题目AC Code: A 题目 这个 A 题为什么是平时 B 题的分值&#xff1f; 统计每一个字母的出现次数&#xff0c;找到出现次数为 1 1 1 的字母&#xff0c;输…

计算机网络面经-TCP的拥塞控制

写在前边 前边我们分享了网络分层协议、TCP 三次握手、TCP 四次分手。今天我们继续深入分享一下 TCP 中的拥塞控制。 对于 TCP 的拥塞控制,里边设计到很多细节,平平无奇的羊希望通过这一节能够将这部分内容串通起来,能够让你更深刻的记忆这部分内容。 思维导图 1、什么…

封装(encapsulation)

封装[encapsulation] 封装介绍封装好处封装的实现步骤&#xff08;三步&#xff09;入门案例封装与构造器 封装介绍 封装就是把抽象的数据[属性]和对数据的操作[方法]封装在一起&#xff0c;数据被保护在内部&#xff0c;程序的其它部分只有通过被授权的操作[方法]&#xff0c;…

HDL FPGA 学习 - 入门好文,相关网站、开发板、教程推荐

目录 O.0 值得跟着的学习网站 0.25 开源 & 学习 FPGA 开发板 0.5 FPGA 相关好文杂文存放 编辑整理 by Staok&#xff0c;始于 2021.2 且无终稿。转载请注明作者及出处。整理不易&#xff0c;请多支持。 本文件是“瞰百易”计划的一部分&#xff0c;尽量遵循“二项玻”定…

vue项目的前端工程化思路webpack(持续更新中)

写在前面&#xff1a;现在的前端网页功能丰富&#xff0c;特别是SPA&#xff08;single page web application 单页应用&#xff09;技术流行后&#xff0c;JavaScript的复杂度增加和需要一大堆依赖包&#xff0c;还需要解决Scss&#xff0c;Less……新增样式的扩展写法的编译工…

ubuntu 学习

软件包 #查找软件包 apt-cache search qemudpkg-query -L gcc-13-arm-linux-gnueabihfapt-get install bzip2 --yes 参考 Linux下apt-get命令详解&#xff08;安装、卸载、更新、查询软件包&#xff09; - 知乎dpkg-query命令 – 在dpkg数据库中查询软件包 安装gcc工具 a…

JavaScript 进阶01

作用域 局部作用域 局部作用域分为函数作用域和块作用域。 函数作用域 在函数内部声明的变量只能在函数内部被访问&#xff0c;外部无法直接访问。函数执行完毕后&#xff0c;函数内部的变量实际被清空了 块作用域 在 JavaScript 中使用 {} 包裹的代码称为代码块&#xf…

P1443 马的遍历题解

题目 有一个nm的棋盘&#xff0c;在某个点(x,y)上有一个马&#xff0c;要求你计算出马到达棋盘上任意一个点最少要走几步。 输入输出格式 输入格式 输入只有一行四个整数&#xff0c;分别为n,m,x,y。 输出格式 一个nm的矩阵&#xff0c;代表马到达某个点最少要走几步&…

DC与DCT DCG的区别

先进工艺不再wire load model进行静态时序分析&#xff0c;否则综合结果与后端物理电路差距很大&#xff0c;因此DC综合工具也进行了多次迭代&#xff0c;DC工具有两种模式&#xff0c;包括wire load mode和Topographical Mode&#xff0c;也就是对应的DC Expert和DC Ultra。 …