自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(242)
  • 问答 (1)
  • 收藏
  • 关注

原创 qt的mingw转msvc问题

属性->配置属性->C/C++->命令行->其他选项,添加/utf-8。2.报错C2001:常量中有换行符。

2024-04-15 16:36:38 208

原创 C++面向对象--第十五章运算符重载

不要重载&&、||。因为用户无法实现&&和||的短路特性。

2023-12-30 15:42:12 354

原创 区分:重写、重载、重定义

函数返回值,函数名字,函数参数,必须和基类中的虚函数一致。子类(派生类)重新定义父类(基类)的同名成员(非。、参数个数,参数顺序,参数类型不同。子类(派生类)重写父类(基类)的。和函数返回值,没有关系。同一作用域的同名函数。virtual函数)

2023-12-30 15:26:47 380

原创 总结:虚函数、纯虚函数、虚析构、纯虚析构

2.纯虚函数:virtual修饰,末尾加0,没有函数体,所在的类为抽象类。目的:为了解决基类的指针指向派生类对象,并用基类的指针删除派生类对象。1.虚函数:只是virtual修饰的,有函数体,作用于成员函数。目的:用基类的指针删除派生类对象、同时提供固定接口。3.虚析构:virtual修饰类中的析构函数。4.纯虚析构:virtual修饰,末尾加0,目的:通过基类指针或引用操作子类的同名函数。目的:为子类提供固定的流程和接口。必须实现析构的函数体。

2023-12-30 15:25:38 425

原创 C++面向对象--第十四章抽象类(接口)

5.如果派生类中没有定义纯虚函数的实现,而派生类中只是继承基类的纯虚函数,则这个派生类仍然是一个抽象类。如果派生类中给出了基类纯虚函数的实现,则该派生类就不再是抽象类了,它是一个可以建立对象的具体类了。但是可以声明指向抽象类的指针或引用,此指针可以指向它的派生类,进而实现多态性。4.抽象类不能用作函数的参数类型、函数的返回类型或是显式转换的类型。1.由于抽象类中至少包含一个没有定义功能的纯虚函数。抽象类只能作为其他类的基类来使用,不能实例化抽象类对象。所谓具体类,就是不包含纯虚函数的普通类。

2023-12-30 15:21:46 394

原创 C++面向对象--第十三章虚析构、纯虚析构

原因:通过基类指针释放子类对象时,先调用子类析构,再父类析构(Animal在没有涉及虚析构的时候只能调用父类的析构函数。与普通纯虚函数不同点:纯虚析构函数不仅需要=0,而且。虚析构:在析构函数前加virtual修饰。子类析构调用完,系统会自动调用父类析构。通过基类指针、引用释放子类的所有空间。如果父类的析构不实现,无法实现调用。问题:为什么只能释放父类的析构。解决:虚析构(虚函数)

2023-12-30 14:28:25 277

原创 C++面向对象--第十二章虚函数、纯虚函数

总结:当虚函数涉及到继承的时候子类会继承父类的(虚函数指针vfptr和虚函数表vftable),编译器会将虚函数表中的函数入口地址更新成子类的同名返回值、参数都相同)的函数入口地址。如果基类指针、引用访问虚函数的时候就会间接的调用子类的虚函数.

2023-12-30 14:20:26 328

原创 C++面向对象--第十一章菱形继承和二义性问题

菱形继承(Diamond Inheritance)是指一个派生类同时继承自两个直接或间接基类,而这两个基类又共同继承自同一基类的情况。这种继承关系形成了类似于菱形的结构,因此称为菱形继承。图中,Animal是基类,Mammal和Bird是它的派生类,而Bat则同时从Mammal和Bird派生,形成了菱形继承。

2023-12-28 19:58:31 351

原创 C++面向对象--第十章多继承

其中,这个被共享的基类就称为虚基类(Virtual Base Class)。派生类定义同名成员,默认访问的就是派生类同名成员。即当多个基类中有同名成员,出现访问不唯一的问题。虚继承的目的是让某个类做出声明,承诺愿意。一个派生类同时继承多个基类的行为。virtual 继承方式 基类名。同名成员比虚基类的优先级更高。

2023-12-16 10:52:58 332

原创 C++面向对象--第九章类的继承和派生

父类的publicprotectedprivate都占用子类空间。虽然在子类中访问不到父类的private,但是依旧占用位置class Basepublic:int a;int e;

2023-12-15 19:46:06 822

原创 C++面向对象--第八章类的静态常成员

但是,如果你想在静态常成员函数中访问类的非静态成员变量或调用非静态成员函数,则需要将这些成员变量或函数声明为 const 成员。这样做的目的是确保在静态常成员函数内部不会改变类的状态。,它们不访问类中的非静态成员变量,也不会对对象进行修改,因此不需要使用 const 修饰符。注意:无论建立多少个类的对象,都只有一个静态成员的拷贝---实现。对象指针->静态成员函数名(实参表);类名::静态成员函数名(实参表);对象.静态成员函数名(实参表);这是因为静态成员函数。->静态常数据成员名。

2023-11-28 10:43:01 377

原创 Qt编译数据库驱动(Qt6)

在高版本的Qt中官方并没有为我们提供可用的mysql和oralce插件,只提供了源代码(不能直接使用),需要我们基于这些源码自行编译得到对应的动态库(静态库)之后,才能被程序加载从而连接上相应的数据库。关于在程序中连接数据库有很多种处理方式,比如:odbc、ado等,在Qt底层也对数据库的连接进行了封装,基于不同的连接方式为我们提供了不同的插件(二进制代码,在需要的时候被加载,表现形式为动态库、静态库)。

2023-11-28 09:54:36 1240

原创 C++面向对象--第七章类的常(量)成员

因此,在常成员函数的方法体中,不能修改任何非静态成员变量,并且不能调用其他非常成员函数,除非这些成员函数也被声明为常成员函数。3.如果某个成员变量被声明为volatile或者mutable,那么即使在常成员函数中,仍然可以修改这些特殊修饰的成员变量。初始化:常对象在创建时必须进行初始化,因为它们的值在创建后不能被修改。使用关键字const修饰,表示其数值在对象创建后不能被修改。1.在类的定义和声明处都需要将常成员函数标识为const。常对象的成员变量不能被修改,非常成员函数不能被调用。

2023-11-27 17:05:00 340

原创 C++面向对象--第六章类的静态成员

数据类型类名::静态数据成员名值注意:静态数据成员初始化应在类外单独进行,而且应在定义对象之前进行(C++17后可以在类内进行)。即使是私有的数据也可以在类外初始化如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。无论建立多少个类的对象,都只有一个静态成员的拷贝---实现同一类的不同对象的数据共享数据类型 类名::静态成员函数(参数…) {// 实现静态成员函数的代码。

2023-11-27 15:52:03 338

原创 C++面向对象--第五章类的组合

在一个类中内嵌另一个类的对象作为数据成员,称为类的组合。包含其他类对象的类被称为主类或容器类,而被包含的其他类对象则被称为子类或成员子对象。

2023-11-27 13:59:37 346

原创 C++面向对象--第四章友元

由于类内部的私有成员和保护成员只能在类定义的范围内使用,即外部只能通过成员函数访问。这会造成较大的时间和空间的开销。c++提供了友元,他有权访问类的所有私有(private)成员和保护(protected)成员关键字:friend分类:友元函数、友元类注意:友元不具有交换性和传递性。

2023-11-27 11:12:03 366

原创 C++面向对象--第三章对象指针和对象数组

注意:在继承与派生中,还会涉及到基类指针指向子类对象。对象指针的使用public:"

2023-11-27 10:17:46 368

原创 C++面向对象--第二章类与对象

1.类中定义2.类中声明类外定义1.类中定义2.类中声明类外定义1.类中定义2.类中声明类外定义原因:深拷贝和浅拷贝浅拷贝:由默认的拷贝构造函数所实现的数据成员逐一赋值。大多数情况下默认构造函数是可以胜任这项工作的,但如果类中存在指针类型的数据,浅拷贝就会发生错误。上述错误是因为stu1和stu2所指的内存空间相同,在析构函数释放stu1所指的内存后,再释放stu2所指的内存会发生错误,因为此内存空间已被释放。解决方法就是重定义拷贝构造函数,为其变量重新生成内存空间。

2023-11-25 15:06:55 774

原创 C++面向对象--第一章类与对象

方法:类内,类外,类外内联函数注意:类外定义内联函数时,类的声明和内联函数的定义要在同一个文件中,否则无法进行代码替换例:类的定义在头文件中,成员函数在cpp文件中实现//fun.hclass Dataprivate:int num;return num;return 0;//输出200。

2023-07-15 17:18:24 49

原创 C++基础--第二十章预处理器

常用:_WIN64:判断当前编译环境是否为64位的 Windows 操作系统_WIN32:判断当前编译环境是否为32位的 Windows 操作系统其他:__LINE__:这会在程序编译时包含当前行号。__FILE__:这会在程序编译时包含当前文件名。__DATE__:这会包含一个形式为的字符串,它表示把源文件转换为目标代码的日期。__TIME__:这会包含一个形式为的字符串,它表示程序被编译的时间。return 0;结果。

2023-07-15 14:25:16 102

原创 C++基础--第十九章自定义数据类型

1.定义结构体同时声明结构体变量、初始化2.先定义结构体,然后再定义结构体变量注意:C++中允许不用加struct,既直接"结构体类型名变量名"struct stuint S_num;3.直接定义(不要结构体类型名)---以后不能单独定义结构体变量公用体变量名成员名注意:指针不能指向公用体。

2023-07-15 11:42:51 41

原创 C++基础--第十八章IO流

格式控制iomanip流操纵算子作 用*dec以十进制形式输出整数(常用hex以十六进制形式输出整数oct以八进制形式输出整数fixed以普通小数形式输出浮点数scientific以科学计数法形式输出浮点数left左对齐,即在宽度不足时将填充字符添加到右边*right右对齐,即在宽度不足时将填充字符添加到左边setbase(b)设置输出整数时的进制,b=8、10 或 16setw(w)指定输出宽度为 w 个字符,或输人字符串时读入 w 个字符setfill(c)

2023-07-14 13:46:06 36

原创 C++基础--第十七章时间

其中,Www 表示星期几,Mmm 是以字母表示的月份,dd 表示一月中的第几天,hh:mm:ss 表示时间,yyyy 表示年份。printf("伦敦:%2d:%02d\n", (info->tm_hour+BST)%24, info->tm_min);printf("中国:%2d:%02d\n", (info->tm_hour+CCT)%24, info->tm_min);作用:将 time 所指向的 tm 结构表示的时间转换为一个表示日期和时间的字符串,并返回该字符串的指针。

2023-07-12 17:19:04 25

原创 STL库--算法

头文件。

2023-07-10 16:11:40 28

原创 STL库--内建函数对象

STL 内建了一些函数对象。分为:算数类函数对象关系运算类函数对象逻辑运算类仿函数。这些仿函数所产生的对象, 用法和一般函数完全相同。

2023-07-01 18:04:08 34

原创 STL库--适配器

他们的作用是在绑定函数对象时,暂时不指定参数的值,而是将参数的位置占位。bind1st、bind2nd函数是早期版本的C++标准库中的函数,它是bind函数的一种特殊形式。可以将一个带有多个参数的函数对象或函数指针转换为一个只接受部分参数的函数对象。适配器:将成员函数转换为一元函数对象,可以用于接受一个参数的算法。适配器:将成员函数转换为二元函数对象,可以用于接受两个参数的算法。,并返回一个新的谓词对象,该对象对原谓词的结果进行取反操作。,并返回一个新的谓词对象,该对象对原谓词的结果进行取反操作。

2023-07-01 17:53:14 61

原创 STL库--谓词

如果普通函数或仿函数,有一个参数就叫。如果普通函数或仿函数,有两个参数就叫。谓词通常用于算法中的判断条件,例如在排序算法中。,或者在查找算法中指定要查找的条件。

2023-07-01 17:01:17 40

原创 STL库--函数对象(仿函数)

1、 函数对象通常不定义构造函数和析构函数, 所以在构造和析构时不会发生任何问题, 避免了函数调用的运行时问题。2、 函数对象超出普通函数的概念, 函数对象可以有自己的状态3、 函数对象可内联编译, 性能好。用函数指针几乎不可能4、 模版函数对象使函数对象具有通用性, 这也是它的优势之一。

2023-07-01 16:43:05 36

原创 C++基础--第十六章引用

2.一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。在声明引用时,必须立即对它进行初始化,不能声明完成后再赋值。为引用提供的初始值,可以是一个变量或者另一个引用。注意:当返回值是引用时,不要返回局部变量。引用必须连接到一块合法的内存。返回值是引用,一般是用于。,它必须与某一种类型的变量相联系。引用的本质在c++内部实现是一个。指针可以在任何时间被初始化。“别名”,引用与其代表的变量。,然后用新类型名定义一个变量。,使用时添加&表示取地址。引用可以作为函数参数,

2023-05-03 17:41:31 55 1

原创 函数指针和指针函数

指针函数--返回指针(地址)的函数,本质上是函数声明格式:类型标识符函数名参数表注意:需要一个同类型的指针来接收其函数的返回值不过也可以将其返回值定义为void*类型,在调用时强制类型转换为自己想要的类型。

2023-04-04 17:12:36 52

原创 引入charts报错解决

如果在.pro文件中添加了"QT += charts"并且出现了类似于"error: C2872: 'byte': ambiguous symbol"的报错信息,这可能是由于在Qt 6中引入了std::byte,从而与Windows SDK中的byte冲突。这将确保在编译时使用C++17版本的__cplusplus宏定义,而不是Windows SDK中的版本。这应该解决由std::byte和Windows SDK中的byte冲突引起的问题。

2023-04-03 00:43:55 337

原创 STL库--迭代器

每个迭代器对象代表容器中的确定的地址,所以可以认为迭代器其实就是用来指向容器中数据的。::const_reverse_iterator 迭代器名。,我们可以通过改变这个指针来遍历容器中的所有元素。::reverse_iterator 迭代器名。::const_iterator 迭代器名。::iterator 迭代器名。STL容器中的部分或全部元素。迭代器是一种对象,它。按照定义可以分为四种。

2023-03-23 17:49:19 67

原创 元组tuple

tuple模板是pair的泛化,可以封装不同类型任意数量的对象。uple可以声明二元组,也可以声明三元组。tuple_size<decltype(t)>::value:获取元素个数。

2023-03-23 17:48:41 50

原创 对组pair

对组(pair)将一对值组合成一个值,这一对值可以具有不同的数据类型, 两个值可以分别用 pair 的两个公有属性 first 和 second 访问。可以作为map键值对进行插入。

2023-03-23 17:47:40 72

原创 数组array

array1.empty():判断容器是否为空 at(n) 返回容器中 n 位置处元素的引用,函数会自动检查 n 是否在有效的范围内,如果不是则抛出 out_of_range 异常。array1.size():返回容器中元素的数量,其值等于初始化 array 类的第二个模板参数N。array1.back():返回容器中最后一个元素的直接引用,函数不适用于空的 array 容器。array1.front():返回容器中第一个元素的直接引用,函数不适用于空的 array 容器。//声明一个大小为n的T型数组。

2023-03-23 17:47:22 67

原创 位组bitset

b.test(pos):测试b在pos位置是否为1,是则返回true。b.any():b中是否存在置为1的二进制位,有则返回true。b.none():b中是否没有1,没有则返回true。//a有n位,每位都为0。b.reset(pos):把b中pos位置置为0。b.set(pos):把b中pos位置置为1。b.flip(pos):把b中pos位置取反。b.reset():把b中所有位都置为0。b.size():b中二进制位的个数。b.set():把b中所有位都置为1。b.count():b中为1的个数。

2023-03-23 17:44:59 45

原创 STL库--string容器

必须先声明:#include <string>2.读入一行字符串(包括空格),遇回车结束注意:getline(cin, s)会获取前一个输入的换行符,所以需要在前面添加读取换行符的语句。如:getchar() 或cin.get()正确读法:总结:要特别注意cin与cin.getline()的混用

2023-03-23 17:41:34 63

原创 字符指针、字符数组

字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。(即用字符数组来存放字符串)。注意2:这种赋值方式只能在字符数组初始化时使用,不能用于字符数组的赋值。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并。指针q肯定是放不下整个字符串的,只能把。字符串指针变量本身是一个变量,用于。注意1:花括号可以省略。

2023-03-23 16:56:23 45

原创 顺序性容器的区别

优点:每次存放新节点的时候都重新new空间。缺点:其他位置的插入/删除操作效率低下。缺点:迭代器复杂度高,排序效率低下。缺点:不能进行随机访问。

2023-03-22 13:55:32 29

原创 STL库--容器的使用场景

vector 的使用场景:比如软件历史操作记录的存储, 我们经常要查看历史记录,比如上一次的记录, 上上次的记录, 但却不会去删除记录, 因为记录是事实的描述。deque 的使用场景:比如排队购票系统, 对排队者的存储可以采用 deque,支持头端的快速移除, 尾端的快速添加。list 的使用场景:比如公交车乘客的存储, 随时可能有乘客下车, 支持频繁的不确实位置元素的移除插入。set 的使用场景:比如对手机游戏的个人得分记录的存储, 存储要求从高分到低分的顺序排列。

2023-03-16 16:40:18 143

空空如也

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

TA关注的人

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