QT第25-26节课程笔记 - 继承及分文件

Qt 多线程的几种实现方式 Qt多线程的实现方式有: 1. 继承QThread类,重写run()方法 2. 使用moveToThread将一个继承QObject的子类移至线程,内部槽函数均在线程中执行 3. 使用QThreadPool,搭配QRunnable(线程池) 4. 使用QtConcurrent(线程池) 阅读详情

2.10 继承

2.10.1 继承基本概念

继承是面向对象编程(OOP)中的一个核心概念,特别是在C++中。它允许一个类(称为派生类或子类)继承另一个类(称为基类或父类)的属性和方法。继承的主要目的是实现代码重用,以及建立一种类型之间的层次关系。

特点

  1. 代码重用:子类继承了父类的属性和方法,减少了代码的重复编写。
  2. 扩展性:子类可以扩展父类的功能,添加新的属性和方法,或者重写(覆盖)现有的方法。
  3. 多态性:通过继承和虚函数,C++支持多态,允许在运行时决定调用哪个函数。

基本用法

在C++中,继承可以是公有(public)、保护(protected)或私有(private)的,这决定了基类成员在派生类中的访问权限。

#include <iostream>
using namespace std;

//基类,父类
class Vehicle{ //交通工具,车,抽象的概念
public:
    string type;
    string contry;
    string color;
    double price;
    int numOfWheel;

    void run(){
        cout << "车跑起来了" << endl;
    }
    void stop();
};

//派生类,子类
class Bickle : public Vehicle{

};

//派生类,子类
class Roadster : public Vehicle{ //跑车,也是抽象,比父类感觉上范围缩小了点
public:
    int stateOfTop;

    void openTopped();
    void pdrifting();
};

int main()
{
    Roadster ftype;
    ftype.type = "捷豹Ftype";
    ftype.run();
    Bickle bike;
    bike.type = "死飞";
    bike.run();
    return 0;
}

在这个例子中,Vehicle 类公有地继承自 Vehicle 类,这意味着所有 Vehicle 类的公有成员在 Vehicle 类中也是公有的。

让我们用一个简单而有趣的案例来说明继承的概念:动物园中的动物。

想象我们正在创o在这个程序中,我们有一个基类 Animal,它定义了所有动物共有的特性和行为。然后,我们可以创建几个派生类,如 Lion、Elephant 和 Bird,这些类继承自 Animal 类,并添加或修改特定于它们自己的特性和行为。

基类:Animal

#include <iostream>
#include <string>

class Animal {
protected:
    std::string name;
    int age;

public:
    Animal(std::string n, int a) : name(n), age(a) {}

    virtual void makeSound() {
        std::cout << name << " makes a sound." << std::endl;
    }

    virtual void display() {
        std::cout << "Animal: " << name << ", Age: " << age << std::endl;
    }
};

派生类:Lion

class Lion : public Animal {
public:
    Lion(std::string n, int a) : Animal(n, a) {}

    void makeSound() override {
        std::cout << name << " roars." << std::endl;
    }

    void display() override {
        std::cout << "Lion: " << name << ", Age: " << age << std::endl;
    }
};

派生类:Elephant

class Elephant : public Animal {
public:
    Elephant(std::string n, int a) : Animal(n, a) {}

    void makeSound() override {
        std::cout << name << " trumpets." << std::endl;
    }

    void display() override {
        std::cout << "Elephant: " << name << ", Age: " << age << std::endl;
    }
};

派生类:Bird

class Bird : public Animal {
public:
    Bird(std::string n, int a) : Animal(n, a) {}

    void makeSound() override {
        std::cout << name << " sings." << std::endl;
    }

    void display() override {
        std::cout << "Bird: " << name << ", Age: " << age << std::endl;
    }
};

使用这些类

int main() {
    Lion lion("Leo", 5);
    Elephant elephant("Ella", 10);
    Bird bird("Bella", 2);

    lion.display();
    lion.makeSound();

    elephant.display();
    elephant.makeSound();

    bird.display();
    bird.makeSound();

    return 0;
}

在这个例子中:

  • Animal 是基类,定义了所有动物共有的属性(如 name 和 age)和方法(如 makeSound 和 display)。
  • Lion、Elephant 和 Bird 是派生类,它们继承了 Animal 的特性,并根据自身的特性重写了 makeSound 和 display 方法。
  • 在 main 函数中,创建了各种动物的实例,并展示了它们的行为。

这个例子展示了继承如何使代码更有组织、更易于管理,并且如何通过重写基类方法来实现多态性。

qt开发教程视频c++入门自学qt5.5课程linux gui程序实战案例opia —//A25 QT教程/ ├──Qt 5开发教程 | ├──Qt初级教程 | | ├──第10课&基于Widget的GUI编程 – 其他控件 | | ├──第11课&基于Widget的GUI编程 – Android开发 | | ├──第八课&基于Widget的GUI编程 – ItemViews | | ├──第二课&开发环境搭建 | | ├──第六课&基于Widget的GUI编程 – 显示控件 | | ├──第七课&基于Widget的GUI编程 – ItemW 阅读详情

相关推荐

QT做的小游戏,技术成长ing(莫名押韵_dog)

文章目录1、创建项目2、导入资源实现退出3、主场景的搭建4、开始按钮封装5、开始按钮跳跃效果实现6、选择关卡场景的基本配置7、返回按钮的创建8、返回按钮的功能实现 1、创建项目 创建QT widgets Application,项目名任意,选择基类QMainWindow,类名MainScene,代表主场景。(注意项目所在路径千万不要出现中文,否则可能会出现点击运行,没有窗口弹出的情况) 选择MinGW作为编译器 2、导入资源实现退出 (1)导入资源 将资源文件复制到当前项目下 右击项目名—添加新文件—

qq_40077565的博客 1万+

Qt4.8类继承关系图(全网最全)

全网最全、最新的Qt类继承关系图 包含了png、svg、pdf、markdown、excel、xmind等多种格式。

mahuifa的博客 2233

QT软件开发之基础控件--2.3 QT资源文件

2.3 QT资源文件 实际的应用程序中会用到大量的图片、图标或者其他类型的文件。Qt专门定义了一套资源系统,资源文件的格式为*.qrc。 *.qrc 文件通过rcc资源编译器生成一个名称格式为qrc_*.cpp的标准 C++ 文件,然后就可以通过任意的 C++ 编译器编译,与其他源文件一块链接到目标程序里使用。qrc文件在编译后会将资源编译链接进程序内部,在发布应用程序的时候就不需要带上一堆文件夹,省去了一切麻烦。如果资源文件太大,超过了4以上的文件就不建议放在资源文件中,编译会出现错误。这些大的文件可以

730

QT中QWidget、QDialog及QMainWindow的区别

转自:http://www.cnblogs.com/aqxin/archive/2011/05/23/2054156.html   QWidget类是所有用户界面对象的基类。 窗口部件是用户界面的一个基本单元:它从窗口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己。每一个窗口部件都是矩形的,并且它们按Z轴顺序排列。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。

-CQ-的专栏 878

AIDD机器学习深度学习药物发现与设计教程总结

AIDD(AI Drug Discovery & Design):是近年来非常火热的技术应用,且已经介入到新药设计到研发的大部分环节当中,为新药发现与开发带来了极大的助力。倾向于机器对数据库信息的自我学习,可以对数据进行提取和学习,一定程度上避免了化合物设计过程中的试错路径,同时还会带来很多全新的结构,为药物发现打破常规的结构壁垒。覆盖了机器学习和深度学习,能与新药研发相结合并实质性的应用到靶点预测、高通量筛选、药物设计、药物的ADMET性质预测等;且算力方面,由早期应用于药物发现领域的决策树、随机

wutianlin0723的博客 6819

PCI-Express、MiniPCIe、ExpressCard接口转换说明/引脚互换关系

通过引脚PIN互换可以在PCI-Express、MiniPCIe、ExpressCard之间切换不同的接口;提供接口引脚表和标准尺寸图。

tech34的博客 7125

[Qt开发探幽(一)]QObject、模板继承和多继承

@目录[Qt开发探幽]QObject、模板继承和多继承1. QObject为什么不允许模板继承:2.如果需要使用QObject进行多继承的话,子对象引用的父类链至多只能含有一个QObject3.如果使用模板类和QObject做多继承,编译不通过问题场景[Qt开发探幽]QObject、模板继承和多继承 当我们在用Qt开发一个软件框架的时候,在一个正式一点的库或者框架中,我们不可避免地想要使用继承,...

Andius的博客 1642

C#实现跨域访问共享文件夹的账号密码验证方案

本文详细介绍了在C#中实现跨域访问共享文件夹的账号密码验证方案。通过调用Windows API LogonUser函数,结合LOGON32_LOGON_NEW_CREDENTIALS登录类型,可安全模拟指定用户身份,有效解决工作组与域环境间的文件共享访问难题。文章提供了完整的工具类封装、多种实战场景示例及详细的错误排查指南。

pea55的博客 541

Qt学习--继承(并以分文件实现)

一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数。定义一个派生类,我们使用一个类派生列表来指定基类。类派生列表以一个或多个基类命名。总结:简单来说,父类有的,子类都可以继承(前提是public访问权限),而子类又可以添加自己特有的属性。1.首先包含头文件,我这里就是包含 #include "animal.h"那么,这时候,我想在main里面调用这些类,该怎么做呢?如果要创建一个派生类来继承基类,该怎么做呢?如果要在main中使用这头猪,只需要。2.创建一个类,类名叫:Animal。

weixin_46323814的博客 1919

手把手教你用DSP28335的PWM移相功能搞定双有源桥DAB(附完整代码)

本文详细解析了DSP28335的PWM移相功能在双有源桥DAB中的应用,包括ePWM模块的配置、移相时序原理及实战代码。通过精确的移相控制,实现DAB的高效运行和软开关,适用于车载充电机、储能系统等场景。附完整代码,助力开发者快速掌握硬件级移相技术。

weixin_30632089的博客 423

2026.1.9:最新VSCode集成claude插件完美解决方案,跳过登录界面,使用国内Kimi K2进行计费

本文介绍了如何安装配置Claude插件并连接Kimi K2 API的详细步骤:1)搜索安装Claude插件;2)进入设置关闭登录提示;3)在settings.json中添加API配置,包括ANTHROPIC_AUTH_TOKEN(需替换为Kimi API Key)和ANTHROPIC_BASE_URL;4)通过Kimi官网获取API Key。完成配置后即可正常使用该插件。文中配有完整的操作截图指引。

拥抱具身智能,昇腾Ascend C 8725

16、Qt线程(一):继承QThread,重写run

Qt使用QThread类现实多线程

Viciower的博客 1419

Python爬虫实战:基于Scrapy和Playwright的深交所数据采集

本文将详细介绍如何使用Python最新技术栈(Scrapy框架结合Playwright浏览器自动化)爬取深圳证券交易所(www.szse.cn)的公开数据。文章包含完整项目搭建、反爬策略应对、数据解析存储等全流程实现,并附详细代码示例和性能优化建议。python复制下载# 上市公司基本信息# 财务数据revenue = scrapy.Field() # 营业收入net_profit = scrapy.Field() # 净利润eps = scrapy.Field() # 每股收益。

2201_76125261的博客 952

QT/C++告别新手系列之QT基础篇系列视频课程

QT/C++告别新手系列之QT基础篇系列视频课程

软希网分享源码的博客 1011

duilib入门基础一 容器之 BOX、VBOX、HBOX布局及其子控件align排列方式

序 容器 duilib有以下主要布局容器 Box(自由布局容器) VBox(垂直布局容器) HBox(水平布局容器) TabBox(多标签布局容器) TileBox(格子布局容器) ChildBox(子布局容器) ScrollableBox(可滚动容器) 一、Box容器布局 Box容器及其扩展VBox HBox是其中最常用的容器。 相对Box来说,HBox, VBox更好理解些 1.1 VBox HBox VBox下的各个控件垂...

目前打算换一个工作,有招聘windows c++方向的也欢迎联系,北京、济南 最好 3083

YOLO11多类别数据集的类别平衡方法:讲解类别不平衡问题的识别方法,以及过采样、欠采样、类别权重调整等解决方案(一)

类别不平衡问题是机器学习和计算机视觉领域中一个常见但棘手的挑战。简单来说,当数据集中不同类别的样本数量存在显著差异时,我们就称这个数据集存在类别不平衡问题。在YOLO目标检测任务中,这意味着某些类别的目标对象在训练数据中出现得非常频繁,而其他类别的目标对象则很少出现。 想象一下,你正在训练一个交通监控系统,需要检测不同类型的车辆。在这个场景中,"汽车"这个类别可能有成千上万个实例,而"自行车"或"摩托车"可能只有几百个实例。这种数量上的巨大差异就是典型的类别不平衡问题。 从数学角度来看,假设我们有一个包

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 941

Linux系统下imx6ull QT编程—— C++继承(五)

面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。在 Qt 里大量的使用了这种特性,当 Qt 里的类不满足自己的要求时,我们可以重写这个类,就是通过继承需要重写的类,来实现自己的类的功能。

戚晨夕的博客 504

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

QT 继承QWidget && 继承QDialog

工作项目中,利用到Qt对话框,场景需求: 1. 一部分窗体需要继承自QWidget 2. 一部分窗体需要继承自QDialog 3. 两者均需要去掉标题栏图标,同时能够自由拖动。 如果两者分开继承实现,会造成设置windowFlags、拖动功能部分代码重复冗余,为了达到代码复用的目的,利用模板类进行了封装。 本地使用效果正常,特此备录。 【1】头文件 1 #ifndef _UPC...

weixin_34202952的博客 856

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Qt-学习笔记--里面包含了许多新手会碰到的问题还有一些方法的记录,可以收藏查阅。随时更新

阅读Qt Createror快速入门的阅读笔记

wsmbnyzwn的博客 3732

Qt从安装到实战项目

①使用 delete :堆区: delete 的对象及其所有子对象,按顺序从父对象到子对象调用析构函数。(与创建顺序无关)栈区:不允许 delete。②先创建子对象,后创建父对象:堆区:先创建先析构,但最后释放内存,也就是先析构子对象。栈区:不允许,应用程序crush。③正常情况(不使用 delete 、无父对象子对象创建顺序问题):堆区:先析构父对象,但子对象先释放内存。栈区:先创建后析构,也可以理解为先析构子对象后析构父对象,析构的同时释放内存。(1)信号函数:①返回值是 void。

Jasper的博客 2895

C++/Qt5学习笔记

当然,也可以将这个虚表放到结构体之中(不过依旧是第一个位置),这样就可以不用二级指针了,只用一级指针即可,在这里由于虚表是否内置的变化我们已经发现了使用二级指针的第一个理由:让指针在解引用时能够正确的获取虚表中的 函数指针。的一级指针,而指针的值是指向某块内存空间的,在开头我们提到,指向虚表的指针要放在结构体成员的开头,这样,经过解引用之后的一级指针实际上的值就是虚表的地址。staeChanged信号。的值和类型,对指向的相应的内存空间进行处理,因为指向虚表的指针被放到了第一个,所以。

qq_45803449的博客 1358

QT开发笔记(多媒体实战之录音)

保存为一个音频文件。而 QAudioInput 则是低层次的实现,从类的名称可以知道它是与输入输出流有关的,它可以将音频录制的数据写入一个流设备。设置完成录音项后,使用 QAudioRecorder 的 record()、pause()和 stop()函数即可完成录音。Qt 官方的 audiorecorder 例程,使用默认的设置,也就是 Default 项,Qt 自动选择系统音频输入。如果是 Line_in 的方式录音,请使用一条 3.5mm 的两头公头的音频线,一头对板子上 Line_in。

让学习成为一种习惯 1812

PyQt5| 界面设计 |利用Qt Designer实现简单界面交互

利用qt designer做一个简单的实现交互的小程序

weixin_67437706的博客 3万+

多重继承与虚继承

转自:http://www.cublog.cn/u/18517/showart_252162.html多重继承    在多重继承中,基类的构造函数的调用次序既不受派生类构造函数初始化列表中出现的基类构造函数的影响,也不受基类在构造函数初始化列表中的出现次序的影响,它按照基类在类派

learnerz的专栏 1803
上一篇: QT第24节课程笔记 - 静态成员变量/函数
下一篇: QT第27节课程笔记 - 权限对继承的影响
上官可编程
博客等级 码龄14年 1398粉丝 17原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上官可编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值