【C++成长之路】
文章平均质量分 90
C++自我学习笔记记录
心上学事上练
我想成为怎么样的人,就能成为怎么样的人。一切皆可期,让我们一起成长。
展开
-
Qt界面编程(五)—— QDialog对话框(标准对话框、消息对话框、标准文件对话框)
对话框是 GUI 程序中不可或缺的组成部分。很多不能或者不适合放入主窗口的功能组件都必须放在对话框中,比如用于完成一次性任务的功能(如登录功能、选择某个文件打开、保存文件)。对话框通常会是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。Qt 中使用QDialog类实现对话框,但是声明一个QDilaog对象的时候,不管这个对话框对象跟哪个窗口建立了父子关系,当他显示出来的时候都还是一个顶层的窗口。对话框分为模态对话框和非模态对话框:模态对话框不能操作同一个应用程序的其他窗口。原创 2023-04-02 22:53:51 · 1944 阅读 · 0 评论 -
Qt界面编程(四)—— QMainWindow(一个菜单栏、多个工具栏、多个停靠部件、一个状态栏、一个中心部件)、资源文件
一个主窗口最多只有一个菜单栏。位于主窗口顶部、主窗口标题栏下面。 创建菜单,调用QMenu的成员函数addMenu来添加菜单。 创建菜单项,调用QMenu的成员函数addAction来添加菜单项。 Qt 并没有专门的菜单项类,只是使用一个QAction类,抽象出公共的动作。当我们把QAction对象添加到菜单,就显示成一个菜单项,添加到工具栏,就显示成一个工具按钮。用户可以通过点击菜单项、点击工具栏按钮、点击快捷键来激活这个动作。 主窗口的工原创 2023-04-02 21:54:50 · 7929 阅读 · 0 评论 -
Qt界面编程(三)—— 父子关系、对象树、信号和槽(自定义信号和槽、Qt5与Qt4的写法)
Qt框架默认提供的标准信号和槽不足以完成我们日常应用开发的需求,比如说点击某个按钮让另一个按钮的文字改变,这时候标准信号和槽就没有提供这样的函数。但是Qt信号和槽机制提供了允许我们自己设计自己的信号和槽。声明在类的signals域下没有返回值,void类型的函数只有函数声明,没有定义可以有参数,可以重载通过emit关键字来触发信号,形式:emit object->sig(参数);原创 2023-04-01 22:32:22 · 1108 阅读 · 0 评论 -
Qt界面编程(二)—— Qt 5 帮助文档的详解
公有成员函数:操作部件属性的相关函数。公有槽函数:Qt类中已经定义好的槽函数,直接可与信号相连接。信号:软中断,如按下按钮触发 pressed() 信号等。保护成员函数:通常事件所对应的虚函数放在此处。事件:常用事件,如操作鼠标触发的鼠标事件。原创 2023-03-26 16:36:52 · 4861 阅读 · 1 评论 -
Qt界面编程(一)—— Qt概述、Qt的安装和环境变量的配置、Qt程序简单说明
Qt是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。原创 2023-03-22 19:27:07 · 7189 阅读 · 0 评论 -
C++核心知识(五)—— 继承和派生
当使用虚继承时,虚基类是被共享的,也就是在继承体系中无论被继承多少次,对象内存模型中均只会出现一个虚基类的子对象(这和多继承是完全不同的)。即使共享虚基类,但是必须要有一个类来完成基类的初始化(因为所有的对象都必须被初始化,哪怕是默认的),同时还不能够重复进行初始化,那到底谁应该负责完成初始化呢?C++标准中选择在每一次继承子类中都必须书写初始化语句(因为每一次继承子类可能都会用来定义对象),但是虚基类的初始化是由最后的子类完成,其他的初始化语句都不会调用。原创 2023-03-08 22:50:25 · 3342 阅读 · 0 评论 -
C++核心知识(三)—— 静态成员(变量、函数、const成员)、面向对象模型(this指针、常函数、常对象)、友元、数组类、单例模式
在c语言中, 变量和函数“分开来声明的,也就是说,语言本身并没有支持“数据”和“函数”之间的关联性我们把这种程序方法称为“程序性的”,由一组“分布在各个以功能为导航的函数中”的算法驱动,它们处理的是共同的外部数据。this指针是C++实现封装的一种机制,它将对象和该对象调用的成员函数连接在一起,在外部看来,每一个对象都拥有自己的函数成员。比如你的家,有客厅,有你的卧室,那么你的客厅是Public的,所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去,但是呢,你也可以允许你的闺蜜好基友进去。原创 2023-03-06 20:56:52 · 876 阅读 · 0 评论 -
C++核心知识(二)—— 类和对象(类的封装)、对象的构造和析构(浅拷贝、深拷贝、explicit、动态分配内存)
定义一个结构体用来表示一个对象所包含的属性,函数用来表示一个对象所具有的行为,这样我们就表示出来一个事物,在c语言中,行为和属性是分开的,也就是说吃饭这个属性不属于某类对象,而属于所有的共同的数据,所以不单单是PeopleEat可以调用Person数据,AnimalEat也可以调用Person数据,那么万一调用错误,将会导致问题发生。对象的初始化和清理也是两个非常重要的安全问题,一个对象或者变量没有初始时,对其使用后果是未知,同样的使用完一个变量,没有及时清理,也会造成一定的安全问题。原创 2023-03-06 08:50:04 · 796 阅读 · 0 评论 -
C++核心知识(一)—— C++概述、C++对C的扩展(作用域、struct类型、引用、内联函数、函数默认参数、函数占位参数、函数重载)
c++”中的++来自于c语言中的递增运算符++,该运算符将变量加1。c++起初也叫”c withclsss”.通过名称表明,c++是对C的扩展,因此c++是c语言的超集,这意味着任何有效的c程序都是有效的c++程序。c++程序可以使用已有的c程序库。为什么c++不叫++c呢?因为它虽然对c进行了改进、扩展,但是很多人还是把它当做c来使用。c++后置++,先对c进行扩展,但返回的还是c.库是编程模块的集合,可以在程序中调用它们。原创 2023-03-03 11:26:27 · 869 阅读 · 0 评论 -
C语言数据结构(二)—— 受限线性表 【栈(Stack)、队列(Queue)】
在数据结构逻辑层次上细分,线性表可分为一般线性表和受限线性表。一般线性表也就是我们通常所说的“线性表”,可以自由的删除或添加结点。受限线性表主要包括栈和队列,受限表示对结点的操作受限制。一般线性表详解,请参考文章:C语言数据结构(一)—— 数据结构理论、线性表【动态数组、链表(企业版单向链表)】原创 2023-02-26 15:54:01 · 1114 阅读 · 0 评论 -
C语言数据结构(一)—— 数据结构理论、线性表【动态数组、链表(企业版单向链表)】
数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据不仅仅包括整型、实型等数值类型,还包括字符及声音、图像、视频等非数值类型。原创 2023-02-25 20:10:51 · 433 阅读 · 0 评论 -
C语言进阶(九)—— 函数指针和回调函数、预处理、动态库和静态库的使用、递归函数
通过函数类型定义的变量是不能够直接执行,因为没有函数体。只能通过类型定义一个函数指针指向某一个具体函数,才能调用。这一点和数组一样,因此我们可以用一个指针变量来存放这个入口地址,然后通过该指针变量调用函数。,指向函数的指针也可以作为参数,以实现函数地址的传递。函数参数除了是普通变量,还可以是函数指针变量。函数指针数组,每个元素都是函数指针。C语言中的函数有自己特定的类型。指针函数是返回类型为指针的函数;通过什么来区分两个不同的函数?,函数名代表函数的入口地址。函数指针是指向函数的指针;原创 2023-02-23 15:16:11 · 970 阅读 · 0 评论 -
C语言进阶(八)—— 链表
链表是一种常用的数据结构,它通过指针将一些列数据结点,连接成一个数据链。相对于数组,链表具有更好的动态性(非顺序存储数据域用来存储数据,指针域用于建立与下一个结点的联系。建立链表时无需预先知道数据总量的,可以随机的分配空间,可以高效的在链表中的任意位置实时插入或删除数据。链表的开销,主要是访问顺序性和组织链的空间损失。数组和链表的区别:数组:一次性分配一块连续的存储区域。优点:随机访问元素效率高缺点:1) 需要分配一块连续的存储区域(很大区域,有可能分配失败)原创 2023-02-23 11:38:23 · 823 阅读 · 0 评论 -
C语言进阶(七)—— 文件操作
作为一名程序员,您必须编程来创建、写入和读取文件。编写程序从文件读取信息或者将结果写入文件是一种经常性的需求。原创 2023-02-22 22:05:46 · 619 阅读 · 0 评论 -
C语言进阶(六)—— 结构体
int age;int age;}Person;注意:定义结构体类型时不要直接给成员赋值,结构体只是一个类型,编译器还没有为其分配空间,只有根据其类型定义变量时,才分配空间,有空间后才能赋值。int age;}p1;//1.定义类型同时定义变量struct{int age;}p2;//2.定义类型同时定义变量//3.通过类型直接定义。原创 2023-02-22 17:18:02 · 313 阅读 · 0 评论 -
C语言进阶(五)—— 多维数组
源代码的可读性几乎总是比程序的运行时效率更为重要只要有可能,函数的指针形参都应该声明为const在多维数组的初始值列表中使用完整的多层花括号提高可读性在绝大多数表达式中,数组名的值是指向数组第1个元素的指针。这个规则只有两个例外,sizeof和对数组名&。指针和数组并不相等。当我们声明一个数组的时候,同时也分配了内存。但是声明指针的时候,只分配容纳指针本身的空间。当数组名作为函数参数时,实际传递给函数的是一个指向数组第1个元素的指针。原创 2023-02-22 12:34:43 · 1095 阅读 · 0 评论 -
C语言进阶(四)—— 位运算
可以使用C对变量中的个别位进行操作。您可能对人们想这样做的原因感到奇怪。这种能力有时确实是必须的,或者至少是有用的。C提供位的逻辑运算符和移位运算符。在以下例子中,我们将使用二进制计数法写出值,以便您可以了解对位发生的操作。在一个实际程序中,您可以使用一般的形式的整数变量或常量。例如不适用00011001的形式,而写为25或者031或者0x19.在我们的例子中,我们将使用8位数字,从左到右,每位的编号是7到0。原创 2023-02-21 23:09:18 · 204 阅读 · 0 评论 -
C语言进阶(三)—— 指针的指针(二级指针)
c访问c所指向的位置,我们知道这是变量b.第二个间接访问操作符访问这个位置所指向的地址,也就是变量a.指针的指针并不难懂,只需要留心所有的箭头,如果表达式中出现了间接访问操作符,你就要随箭头访问它所指向的位置。显然它是一个指针,但它所指向的是什么?变量b是一个“指向整型的指针”,所以任何指向b的类型必须是指向“指向整型的指针”的指针,更通俗地说,是一个指针的指针。指针变量和其他变量一样,占据内存中某个特定的位置,所以用&操作符取得它的地址是合法的。那么这个变量的声明是怎样的声明的呢?原创 2023-02-21 21:16:44 · 455 阅读 · 0 评论 -
C语言进阶(二)—— 指针强化
别看free和delete的名字(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。注意:对一个int*类型指针解引用会产生一个整型值,类似地,对一个float*指针解引用会产生了一个float类型的值。但从定义上看,NULL指针并未指向任何东西,因为对一个NULL指针因引用是一个非法的操作,原创 2023-02-21 19:29:27 · 668 阅读 · 0 评论 -
C语言进阶(一)—— 内存分区:变量和内存分布
数据类型本质是固定内存大小的别名,是个模具,C语言规定:通过数据类型定义变量;数据类型大小计算(sizeof可以给已存在的数据类型起别名typedef;数据类型的封装(void 万能类型在理解C/C++内存分区时,常会碰到如下术语:数据区堆栈静态区常量区全局区字符串常量区文字常量区代码区等等,初学者被搞得云里雾里。在这里,尝试捋清楚以上分区的关系。数据区包括:堆,栈,全局/静态存储区。全局/静态存储区包括:常量区,全局区、静态区。常量区包括。原创 2023-02-15 16:34:43 · 653 阅读 · 0 评论 -
C语言标准 —— C89(C90)、C99、C11、C17、C2X
C语言最初由 Dennis Ritchie 于 1969 年到 1973 年在 AT&T 贝尔实验室里开发出来,主要用于重新实现 Unix 操作系统。此时,C语言又被称为 K&R C。其中,K 表示 Kernighan 的首字母,而 R 则是 Ritchie 的首字母。K&R C语言与后来标准化的C语言有很大差异,比如:也可以写成编译器不会有任何警告,更不会报错。K&R 的C语法中,定义一个函数时,其形参列表先列出形参的标识符,然后在函数声明的后面紧跟着对形参标识符的完整声明,最后是函数体。原创 2023-02-09 17:57:35 · 6871 阅读 · 0 评论 -
C语言基础(十)—— 文件操作
磁盘文件指一组相关数据的有序集合,通常存储在外部介质(如磁盘)上,使用时才调入内存。设备文件在操作系统中把每一个与主机相连的输入、输出设备看作是一个文件,把它们的输入、输出等同于对磁盘文件的读和写。原创 2023-02-08 21:10:15 · 401 阅读 · 0 评论 -
C语言基础(九)—— 复合类型(自定义类型)
数组:描述一组具有相同类型数据的有序集合,用于处理大量相同类型的数据运算。有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性。显然单独定义以上变量比较繁琐,数据不便于管理。C语言中给出了另一种构造数据类型——结构体。定义结构体变量的方式(3种):先声明结构体类型再定义变量名在声明类型的同时定义变量直接定义结构体类型变量(无类型名)结构体类型和结构体变量关系:结构体类型:指定了一个结构体类型,它相当于一个模型,但其中并无具体数据,系统对之也。原创 2023-02-08 20:18:28 · 585 阅读 · 1 评论 -
C语言基础(八)—— 内存管理、作用域、内存布局、内存区代码分析
类型作用域生命周期auto变量一对{}内当前函数static局部变量一对{}内整个程序运行期extern变量整个程序整个程序运行期static全局变量当前文件整个程序运行期extern函数整个程序整个程序运行期static函数当前文件整个程序运行期register变量一对{}内当前函数全局变量整个程序整个程序运行期类型作用域生命周期存储位置auto变量一对{}内当前函数栈区static局部变量一对{}内整个程序运行期。原创 2023-02-08 15:11:13 · 1280 阅读 · 1 评论 -
C语言基础(七)—— 指针、指针变量
内存含义:存储器:计算机的组成中,用来存储程序和数据,辅助CPU进行运算处理的重要部分。内存:内部存贮器,暂存程序/数据——掉电丢失 SRAM、DRAM、DDR、DDR2、DDR3。外存:外部存储器,长时间保存程序/数据—掉电不丢ROM、ERRROM、FLASH(NAND、NOR)、硬盘、光盘。内存是沟通CPU与硬盘的桥梁:暂存放CPU中的运算数据暂存与硬盘等外部存储器交换的数据指针也是一种数据类型,指针变量也是一种变量指针变量指向谁,就把谁的地址赋值给指针变量“*”操作符操作。原创 2023-02-08 08:50:45 · 2247 阅读 · 1 评论 -
C语言基础(六)—— 函数的定义、声明、调用、防止头文件重复包含
C 程序是由函数组成的,我们写的代码都是由主函数 main()开始执行的。函数是 C 程序的基本模块,是用于完成特定任务的程序代码单元。从函数定义的角度看,函数可分为系统函数和用户定义函数两种:系统函数,即库函数:这是由编译系统提供的,用户不必自己定义这些函数,可以直接使用它们,如我们常用的打印函数printf()。用户定义函数:用以解决用户的专门需要。返回类型 函数名(形式参数列表)数据定义部分;执行语句部分;原创 2023-02-04 21:12:26 · 11510 阅读 · 0 评论 -
C语言基础(五)—— 数组、数组地址(步长+1)、字符串输入输出、随机数
在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来——称为数组。数组就是在内存中连续的相同类型的变量空间。同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的。数组属于构造数据类型一个数组可以分解为多个数组元素:这些数组元素可以是基本数据类型或构造类型。int a[10];按数组元素类型的不同,数组可分为:数值数组、字符数组、指针数组、结构数组等类别。int a[10];char s[10];原创 2023-02-04 15:33:49 · 3239 阅读 · 0 评论 -
C语言基础(四)—— 程序流程结构:选择结构(if、if...else、swich)、循环结构(while、do...while、for);break、continue、goto语句
C语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。顺序结构:程序按顺序执行,不发生跳转。选择结构:依据是否满足条件,有选择的执行相应功能。循环结构:依据条件是否满足,循环多次执行某段代码。原创 2023-02-04 10:46:10 · 835 阅读 · 0 评论 -
C语言基础(三)—— 运算符与表达式、运算优先级、类型转换
类型转换的原则:占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。如果a和b有一个为真,则结果为真,二者都为假时,结果为假。自动转换(隐式转换):遵循一定的规则,由编译系统自动完成。强制类型转换:把表达式的运算结果强制转换成所需的数据类型。“真”用数字“1”来表示, “假”用数字“0”来表示。如果a和b都为真,则结果为真,否则为假。用于表达式的比较,并返回一个真值或假值。(表达式)/函数名(形参表)(类型说明符) (表达式)--变量名/变量名--原创 2023-02-04 08:58:18 · 543 阅读 · 0 评论 -
C语言基础(二)—— 常量与变量、数据类型、进位制、关键字、原码反码补码、限定符、字符串格式化输入输出
打印格式含义%d输出一个有符号的10进制int类型%o(字母o)输出8进制的int类型%x输出16进制的int类型,字母以小写输出%X输出16进制的int类型,字母以大写输出%u输出一个10进制的无符号数int main()//定义变量a,以10进制方式赋值为123//定义变量b,以8进制方式赋值为0567//定义变量c,以16进制方式赋值为0xabcprintf("8进制:b = %o\n", b);printf("10进制:b = %d\n", b);原创 2023-02-03 23:06:36 · 2088 阅读 · 0 评论 -
C语言基础(一)—— C语言概述(领域、编译过程、IDE)
语言是人和人交流,C语言就是人和计算机交流的一种语言编辑器(如vi、记事本)是指我用它来写程序的(编辑代码),而我们写的代码语句,电脑是不懂的,我们需要把它转成电脑能懂的语句,编译器就是这样的转化工具。就是说,我们用编辑器编写程序,由编译器编译后才可以运行!编译器是将易于编写、阅读和维护的高级计算机语言翻译为计算机能解读、运行的低级机器语言的程序。gcc(GNU CompilerCollection,GNU 编译器套件),是由 GNU 开发的编程语言编译器。原创 2023-02-02 20:05:01 · 930 阅读 · 2 评论 -
QT环境变量配置
QT配置环境变量原创 2023-02-02 14:31:25 · 7265 阅读 · 0 评论