自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 收藏
  • 关注

原创 Qt基础004(文件操作)

Qt 也允许使用静态方法直接创建和显示对话框,例如QFileDialog::getOpenFileName() ,这些方法更简单,但提供的自定义选项较少。​ QTextStream 是一个功能强大的类,用于处理文本数据,特别是在需要考虑字符编码和文本格式化的情况下。通过这些特性,它提供了一种灵活而强大的方式来读写和操作文本。QFile是Qt框架种用于文件处理的一个类,它提供了读取和写入文件的功能,支持文本和二进制文件。:根据需要设置对话框的模式,如打开文件、保存文件等。:用于读取和写入数据。

2025-04-18 10:15:32 437

原创 Qt基础003(信号与槽)

概要信号(Signals):是由对象在特定事件发生时发出的消息。例如, QPushButton 有一个clicked() 信号,当用户点击按钮时发出。槽(Slots):是用来响应信号的方法。一个槽可以是任何函数,当其关联的信号被发出时,该槽函数将被调用。连接信号和槽:使用 QObject::connect() 方法将信号连接到槽。当信号发出时,关联的槽函数会自动执行​ 在Qt中,自定义信号与槽是实现对象间通信的一种机制。信号和槽是Qt对象通信的核心特性,使得一个对象能够在发生某种事件时通知其他对象。

2025-04-16 11:18:43 845

原创 Qt基础002(工程描述)

当你在Qt中定义一个类时,如果这个类继承自 QObject 或其子类,并且你想使用Qt的信号和槽机制、国际化、属性系统或其他Qt元对象系统提供的功能,就必须在类定义中包含 Q_OBJECT 宏。这个宏允许Qt的元对象编译器(moc)识别并处理这个类,生成额外的代码,这些代码是实现信号和槽机制以及其他元对象功能所必需的。​ QApplication 是Qt应用程序的核心,它为应用程序提供了必要的环境和框架,确保GUI组件能够正常工作并响应用户的操作。它适合于更简单或专用的应用程序,不需要复杂的用户界面组件。

2025-04-13 21:16:08 444

原创 Qt基础001(简介)

Qt 是一个跨平台的应用程序和用户界面框架,用于开发图形用户界面(GUI)应用程序以及命令行工具。它最初由挪威的 Trolltech (奇趣科技)公司开发,现在由 Qt Company 维护,2020年12月8日发布QT6。Qt 使用 C++ 语言编写,支持多种编程语言通过绑定进行使用。对于许多开发者和小型企业来说,Qt 的开源版提供了一个强大且灵活的开发框架,而对于需要额外支持和专有功能的大型企业或具有特定需求的项目,商业版则提供了所需的服务和资源Qt 商业版。

2025-04-12 22:05:46 821

原创 C++基础15(右值引用&&)

​ 要理解右值引⽤,⾸先得区分左值(lvalue)和右值(rvalue),区分⼀个表达式是左值还是右值,最简便的⽅法就是看能不能够对它取地址或对它进⾏赋值的操作:如果能,就是左值;否则,就是右值。​ 右值引⽤使⽤&&符号来表示,右值引⽤专⻔为右值⽽⽣,可以指向右值,不能指向左值:从性能上讲,左右值引⽤没有区别,传参使⽤左右值引⽤都可以避免拷⻉。// 声明⼀个右值引⽤a = 10;// 右值可以修改int x = 20;int y = 30;//右值通常是常量,表达式或者函数返回值(临时对象)。

2025-03-25 10:02:59 245

原创 C++14(STL)

● STL(StandardTemplate Library)即标准模板库,是⼀个具有⼯业强度的,⾼效的C++程序库。● 主要集成了常⽤的数据结构(类模板实现)和算法(函数实现)。● STL的⼀个重要特点是数据结构和算法的分离● 它不是⾯向对象的,STL主要依赖于模板⽽不是封装,继承和虚函数(多态性)。​ C ++ STL ⼀共提供了六⼤组件,包括容器,算法,迭代器,仿函数,配接器和配置器,彼此可以组合套⽤。

2025-03-19 14:20:12 684

原创 C++13(智能指针)

​ 智能指针其实是⼀个类,实质就是重载了->和*操作符的类,由类来实现对内存的管理,确保即使有异常产⽣,也可以通过智能指针类的析构函数完成内存的释放。智能指针的⾏为类似常规指针,重要的区别在于智能指针负责⾃动释放所指向的对象。STL提供给我们提供了四种智能指针类型,除了下边列出的三种,还有C++98标准auto_ptr智能指针,C+11已将将其摒弃。C++11 标准新引⼊了 这 3 个智能指针:shared_ptr : 允许多个智能指针指向同⼀个对象。

2025-03-17 11:46:13 727

原创 C++12(虚继承)

假如类 A 有⼀个成员变量 a,那么在类 D中直接访问 a 就会产⽣歧义,编译器不知道它究竟来⾃ A -->B–>D 这条路径,还是来⾃ A–>C–>D 这条路径。类 A 派⽣出类 B 和类 C,类 D 继承⾃类 B 和类 C,这个时候类 A 中的成员变量和成员函数继承到类 D 中变成了两份,⼀份来⾃ A–>B–>D 这条路径,另⼀份来⾃ A–>C–>D 这条路径。​ 为了解决多继承时的命名冲突和冗余数据问题,C++ 提出了虚继承,使得在派⽣类中只保留⼀份间接基类的成员。

2025-03-14 19:49:41 264

原创 C++基础11(异常处理)

C++异常是指在程序运⾏时发⽣的反常⾏为,这些⾏为超出了函数正常功能的范围。例如运⾏时耗尽了内存或遇到意外的⾮法输⼊。异常存在于程序的正常功能之外,并要求程序⽴即处理,不做异常处理会导致程序的中断当程序的某部分检测到⼀个它⽆法处理的问题时,需要⽤到异常处理。异常提供了⼀种转移程序控制权的⽅式。C++异常处理涉及到三个关键字:try、catch、throw。

2025-03-11 12:59:28 376

原创 C++基础10(虚函数)

​ 多态性主要通过虚函数(virtual functions)实现,它允许派⽣类重写基类中的⽅法,从⽽在运⾏时根据对象的实际类型来调⽤相应的函数virtual 函数类型 函数名(形参表);

2025-03-10 08:59:20 293

原创 C++基础09(继承后续)

在多继承时,基类与派⽣类之间或基类之间出现,当一个派生类继承多个父类,如果多个父类中存在同名成员,此时派生类对象在调用该同名成员时所出现访问的不确定性 这个叫二义性问题。不同类型数据之间在⼀定的条件下可以进⾏类型的转换,⽐如可以把⼀个整数类型赋值给float类型,但是不能把整数类型赋值给指针类型。这种不同类型之间的⾃动转换和赋值称为。如果函数的参数是基类对象或基类对象的引⽤,函数调⽤时的实参可以是派⽣类对象。当派生类的成员与父类的成员出现重名,此时派生类对象在调用该重名成员时,优先调用派生类的。

2025-03-08 21:54:40 395

原创 C++基础08(多态和运算符重载)

在 C++ 中,当操作数包含类对象时,运算符操作实际上是一个函数。由此可见,对于类对象而言,操作符运算实际上就是调用对应的类方法,但要注意,除了赋值运算操作符(即等号)是默认的之外,其余的大多数运算符都是需要定义了才能用的,否则会被判定为非法。引⼊运算符重载是为了实现类的静态多态性。运算符重载是对已有的运算符赋予多重含义,使⽤⼀个运算符作⽤与不同类型的数据时导致不同的⾏为。运算符重载的⽅法是定义⼀个重载运算符的函数,在需要执⾏被重载的运算符时,系统就⾃动调⽤该函数,以实现相应的运算。

2025-03-05 23:20:20 1045

原创 C++07(继承)

类类型和结构体类型是C++提供给程序员进行自定义类型的两种手段类类型是在结构体的基础上做发展起来的一个类型,是结构体的加强版class 类型名类体(数据成员+函数成员+访问范围修饰符)数据成员-----主要来描述事物的特征函数成员-----主要用来描述事物的行为访问范围修饰符:设置某个成员的可见性,如果省略,默认是私有成员类中数据成员的定义数据成员:格式: 数据类型 成员名;数据成员分类:普通数据成员 int a;通过构造函数实现初始化常数据成员 const int a;

2025-03-04 23:15:19 575

原创 C++基础06(友元函数)

声明时只需要在友元名称签加上关键字friend。

2025-03-04 09:17:04 590

原创 C++基础05(拷贝构造函数)

即将一个对象的成员值一一赋值给另一个对象的对应成员。它只有⼀个参数,这个参数是本类的对象(不能是其他类的对象),⽽且采⽤对象的引⽤的形式(⼀般约定加const声明,使参数值不能改变,以免在调⽤此函数时因不慎⽽使对象值被修改)。是从C语言开始就有的基本关键字,其基本语义是使得被其修饰的符号成为不可修改(只读),在类的定义中,const也是一个很常见的关键字,它也是表达一种。● 指向常对象的指针最常⽤于函数的形参,⽬的是在保护形参指针所指向的对象,使它在函数执⾏过程中不被修改。

2025-03-01 11:26:15 971

原创 C++基础04(类)

​ 在C++中,⽤户⾃定义数据类型的⽅式主要有两种:结构体类型和类类型。其中类类型是根据结构体类型演化过来的⼀种类型,可以说是结构体的增强版。类是⽤户⾃⼰指定的类型。如果程序中要⽤到类类型,必须⾃⼰根据需要进⾏声明,或者使⽤别⼈已设计好的类。C++标准本身并不提供现成的类的名称、结构和内容。在C++中声明⼀个类类型和声明⼀个结构体类型是相似的类(class。

2025-02-27 21:24:44 1220

原创 C++基础03(面向对象)

类是具有相同特征(数据元素)和⾏为(功能)的对象的抽象,不能直接使⽤。○ 特征 被称为 属性(是对事物的某种特性的抽象描述,⽐如年龄,性别)○ ⾏为 被称为 ⽅法(表示对象的⾏为(类中定义的函数,⽤来给类添加功能))

2025-02-26 23:55:26 437

原创 C++基础02(函数)

这个问题的答案比较复杂,总体的基本原则是,只要让系统在使用它们的时候,可以有效地区分各个不同的版本,那它们就可以形成合法的重载版本。在C语言中,相同作用域内的重名函数会引起冲突,哪怕它们拥有不同的参数列表也不行,而在C++中,重名函数只要满足一定的要求,可以同时存在,这大大拓展了函数设计的灵活性。使用内置函数可以节省运行时间,但却增加了目标程序的长度,因此一般只将规模很小(一般为5个语句一下)而使用频繁的函数(如定时采集数据的函数)声明为内置函数。的价值,在C++的函数模板、类模板中,利用。

2025-02-25 21:55:53 919

原创 C++基础01(c++简介)

c++是一个静态类型的,编译型的,支持面向过程编程,面向对象编程和支持泛型编程的高级编程语言编程语言分静态类型编程语言(c,c++,java)和动态类型编程语言(python)静态类型:指的是变量一旦定义,在作用域内,该变量一直属于某种类型动态类型:指的是变量在程序的运行期间,类型随时会变化。编译型:程序在运行前,先有编译这个环节,然后将编译的结果进行执行解释性:程序源码编写完,直接运行,没有编译这个环节:python,shell。

2025-02-25 09:47:37 231

原创 必看006

从语法角度上来说,protected继承会将父类中的public可见性的成员修改成为protected可见性,相当于在子类中引入了protected成员,这样在子类中同样还是可以调用父类的protected和public成员,子类的子类也就可以调用被protected继承的父类的protected和public成员。从语法角度上来说,public继承会保留父类中成员(包括函数和变量等)的可见性不变,也就是说,如果父类中的某个函数是 public的,那么在被子类继承后仍然是public的。

2025-02-24 21:03:51 311

原创 必看006

大端(Big-Endian)定义:高位字节存放在内存的低地址端,低位字节存放在高地址端。举例:假设有一个32位的整数0x12345678,大端模式下内存中存储顺序如下:12(最高位)345678(最低位)特点数据存储顺序符合人类习惯的阅读顺序(从左到右)。网络协议如TCP/IP通常使用大端模式,因此也称“网络字节序”。应用场景:多用于网络通信、部分嵌入式系统(如PowerPC架构)。小端(Little-Endian)定义:低位字节存放在内存的低地址端,高位字节存放在高地址端。

2025-02-13 23:04:12 749

原创 必看005

改变了变量的作用域,使得该全局变量只能在定义它的源文件中访问,其他源文件无法使用该变量。服务器回应SYN+ACK包:服务器接收到客户端的SYN包后,响应一个SYN+ACK包,表示同意连接并返回自己的序列号。客户端回应ACK包:客户端收到服务器的FIN包后,发送ACK包确认,连接关闭。服务器响应ACK包:服务器收到客户端的FIN包后,回应ACK包,确认客户端的关闭请求,但此时连接尚未完全断开。客户端发送ACK包:客户端收到服务器的SYN+ACK包后,发送ACK包确认连接建立,至此,连接正式建立。

2025-02-12 15:58:29 901

原创 Linux系统编程(线程)

分离线程没有被其他的线程所等待,自己运行结束了,线程也就终止了,马上释放系统资源通俗的说也就是:我们知道一般我们要等待(pthread_join)一个线程的结束,主要是想知道它的结束状态,否则等待一般是没有什么意义的!加入pthread_join后,主线程会一直等待,直到等待的线程结束,自己才结束,使创建的线程有机会执行。​ 线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源(栈),但它可与同属一个进程的其它线程共享进程所拥有的全部资源。

2025-02-12 14:09:32 969

原创 必看004

​ 阻塞模式:在阻塞模式下,当一个进程或线程尝试对某个文件描述符(如套接字)进行读写操作时,如果此时该描述符没有准备好(例如,没有数据可读或无法写入数据),那么进程或线程将被挂起,直到描述符准备好为止。在第3步中,fork函数不是由父进程来执行,而是由子进程来执行,当父进程执行完_CLONE函数后,子进程会执行fork函数的剩余部分,执行最后这个语句,fork函数就会有第二次返回,如果成功就返回0,失败就返回-1。总结得出,父子进程都执行fork函数,但执行不同的代码段,获取不同的返回值。

2025-02-11 17:21:09 806

原创 必看003

在Linux内核中,链表节点通常是嵌入在其他数据结构中的,这使得链表可以适应不同的使用场景。此外,通过定义结构体并在其中嵌入list_head类型的成员变量,可以将这个结构体作为链表节点使用,然后使用链表相关的函数对这些节点进行插入、删除、遍历等操作。它是基于双向链表实现的,每个链表节点都包含两个指针,一个指向前一个节点(prev),另一个指向后一个节点(next)。Lambda表达式是C++11引入的一个很重要的特性,它是一个可调用对象,定义了一个匿名函数,并且可以捕获一定范围内的变量。

2025-02-10 11:45:50 394

原创 必看002

(4)一个ELF头内包含有:Section头表的在ELF文件中的偏移地址、单个Section头的大小、Section头表中Section头的个数;Program头表的在ELF文件中的偏移地址、单个Program头的大小、Program头表中Program头的个数;(3)一个Program头指向一个Segment,Program头中包括所指向Segment的类型、其在ELF文件中的偏移地址、大小,映射到内存的虚拟地址等信息。注意:数个连续的头称之为头表,头表是虚拟出来的定义,文件中不存在头表,只有头。

2025-02-08 09:18:04 428

原创 必看001

平衡二叉树,又称为AVL树,是一种特殊的二叉搜索树结构。它的定义是:对于任意节点,其左子树和右子树的高度之差不超过1,并且左子树和右子树也都是平衡二叉树。这个特性使得平衡二叉树在插入、删除等操作能够保持树的平衡,避免树的高度过高,从而影响搜索的效率平衡二叉树的应用广泛,主要用于快速查找和排序数据。由于其特殊的结构,平衡二叉树可以在O的时间内完成查找与排序操作,比线性搜索更为高效。此外,平衡二叉树还可以用于模拟实际场景,存储字典,实现数据库的索引,以及实现其他线性数据结构等。

2025-01-25 14:31:23 769

原创 面试题目1

​ 读写锁允许对共享资源的并发访问,具体取决于访问的类型(读或写)。读写锁适用于读操作频繁且写操作较少的场景,因为它们可以提高并发性能,允许多个线程同时读取共享资源,而不会相互阻塞。=), 大于运算符(>), 小于运算符(<),大于或等于运算符(>=),小于或等于运算符(<=)​ 7.const修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边。​ 4.C++编译器虽然可能为const常量分配空间,但不会使用其存储空间中的值。​ 1.const修饰的变量是只读的,本质还是变量。

2025-01-21 15:38:43 472

原创 Linux系统编程(进程)

​ 在Linux系统中,除了系统的初始进程之外,其余所有进程都是通过从一个父进程(parent)复刻(fork)而来的,有点像人类社会,每个个体都是由亲代父母繁衍而来。因此,在整个Linux系统中,所有的进程都起源于相同的初始进程,它们之间形成一棵倒置的进程树,就像家族族谱,可以使用命令pstree查看这些进程的关系。一个进程在执行时处于不同的状态==;​ 进程(process)是一个独立的可调度的活动,进程是一个抽象的实体,当它执行某个任务时,要分配和释放各种资源,进程是可以并行执行的计算单位。

2025-01-17 17:25:25 982

原创 牛客算法BM1反转链表

这就需要使用到三个struct ListNode*类型的指针了,一个指向头节点,另外两个指向NULL。开始将第一个节点的指向由右指向左,就使用这个方法,将其余剩下的节点都转方向,最后返回prev节点就行。给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。(1) ,时间复杂度 O(n)如当输入链表{1,2,3}时,返回值:{3,2,1}输入:{1,2,3}

2025-01-16 13:36:22 187

原创 Linux系统编程(系统文件IO)

这是通过空洞文件实现的。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写数据到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。buf 参数为要写入文件中数据的内存地址,count参数为欲从 buf写入文件的数据字节数,fd 参数为一文件描述符,指代数据要写入的文件。①lseek函数可以将文件位置调整到任意的位置,可以是已有数据的地方,也可以是未有数据的地方,假设调整到文件末尾之后的某个地方,那么文件将会形成所谓“空洞”

2025-01-15 09:13:20 796

原创 数据结构(单链表和循环单链表)

​ 链式存储中,所有节点的存储位置是随机的,他们之间的逻辑关系用指针来确定,跟物理存储位置无关,因此从上述示例代码可以很清楚看到,增删数据都非常迅速,不需要移动任何数据。另外,又由于位置与逻辑关系无关,因此也无法直接访问某一个指定的节点,只能从头到尾按遍历的方式一个个找到想要的节点。另外注意到,整条链表用一个所谓的头指针 head 来指向,由 head 开始可以找到链表中的任意一个节点。由于链表中的各个节点被离散地分布在各个随机的内存空间,因此销毁链表必须遍历每一个节点,释放每一个节点。

2025-01-06 23:39:59 855

原创 数据结构(顺序表)

数据结构就是计算机存储,组织,管理数据的方式方法顺序存储中,由于逻辑关系是用物理位置来表达的,因此从上述示例代码可以很清楚看到,增删数据都非常困难,需要成片地移动数据。顺序表对数据节点的增删操作是很不友好的。优点:不需要多余的信息来记录数据间的关系,存储密度高所有数据顺序存储在一片连续的内存中,支持立即访问任意一个随机数据,比如上述顺序表中第i个节点是 s->data[i]缺点:插入、删除时需要保持数据的物理位置反映其逻辑关系,一般需要成片移动数据。

2025-01-05 21:45:40 976

原创 C语言基础19(位运算)

a |= (1

2025-01-03 17:43:40 1222

原创 C语言基础18(GDB调试)

GDB是GUN开源组织发布的一款强大的Unix/Linux的程序调试工具GDB。

2025-01-03 15:52:19 964

原创 C语言基础17(预处理/文件包含)

预处理就是在源文件(如.c文件)编译之前,所进行的一部分预备操作,这部分操作是由预处理程序自动完成;当源文件在编译时,编译器会自动调用预处理程序来完成预处理指令的解析,预处理指令解析完成才能进入下一步的编译过程gcc 源文件 -E -o 程序名[-后缀]不带参数的宏定义语法:# define 宏名 常量数据此时的预处理只做数据替换,不做类型检查注意:我们定义的宏是不会占用内存空间,还没有进入到编译环节,更不要说运行了,我们在编译前已经将宏名替换成了常量数据。

2025-01-03 14:50:09 820

原创 C语言基础16(文件IO)

什么是文件文件是保存在外存储器(一般代指磁盘,U盘,移动硬盘等)的数据的集合文件操作体现在哪几个方面​ 1.文件内容的读取​ 2.文件内容的写入数据的读取和写入可被视为针对文件进行输入(Input)和输出(Output)操作,此时数据像水流一样从外存储器流向内存,或者从内存流向外存储器,所以系统形象的 称文件操作为文件流C语言程序对文件的操作采用“文件缓冲机制”。

2024-12-20 20:36:44 653

原创 C语言基础(结构体)

定义:自定义数据类型的一种,关键字struct,结构体类型的变量可以存储多个不同数据类型的数据struct 结构体名数据类型1 成员名称1;//结构体中的变量叫做成员数据类型2 成员名称2;...注意:结构体中定义的变量,我们称之为成员变量格式说明结构体名:合法的标识符,建议单词的首字母大写(所谓的结构体名,就是自定义类型的类型名称)数据类型n:C语言支持的所有类型(包括函数,函数在这里用函数指针表示)成员名称:合法的标识符,就是合法的标识符,变量的命名标准。

2024-12-16 23:47:49 1351

原创 C语言基础14(动态内存控制后续)

如果一个指针指向的内存已经被释放,但指针本身并未重新指向其他有效的内存地址,那么这个指针就变成了悬空指针。定义:空指针即保存了零地址的指针(赋值为NULL的指针),也就是指向零地址的指针(NULL是空常量,它的值是0,这个NULL一般存放在内存0x0000 0000的位置,这个地址只能存NULL,不能被其他程序修改)很多情况下,我们不可避免的会遇到野指针,比如刚定义的指针无法立即为其分配一块恰当的内存,又或者指针指向的内存已经被释放了等等。2.数组操作(遍历和指针运算)时,注意数组的长度,避免越界。

2024-12-15 21:03:05 811

原创 C语言基础13(内存管理)

但又由于这是一块系统“飞地”,所有的细节均由开发者自己把握,系统不对此做任何干预,给予开发者绝对的“自由”,但也正因如此,对开发者的内存管理提出了很高的要求。并将原来的数据拷贝到新的内存中,回收旧的内存单元,并返回新的内存首地址。全局变量在默认的情况下,对所有文件可见,为某些需要在各个不同文件和函数间访问的数据提供操作上的方便。相比栈内存,堆的总大小仅受限于物理内存,在物理内存允许的范围内,系统对堆内存的申请不做限制。注意:数据段和代码段内存的分配和释放,都是由系统规定的,我们无法干预。

2024-12-14 23:18:24 1018

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除