C++
m0_59949484
这个作者很懒,什么都没留下…
展开
-
C++标准模板库-STL
使用迭代器容器,可以通过调用容器对象的begin()方法获取一个指向容器中第一个元素的迭代器,通过调用end()方法获取一个指向容器中最后一个元素之后的位置的迭代器。然后可以使用迭代器的相关方法,如next()、previous()、hasNext()、hasPrevious()等来遍历容器中的元素或执行其他操作。需要注意的是,当vector容器中的元素发生变化(如插入、删除元素),迭代器可能会失效,因此在对容器进行修改时,需要小心处理迭代器的使用。注意,出栈操作只是删除栈顶元素,并不返回该元素。原创 2023-08-15 12:21:27 · 38 阅读 · 0 评论 -
C++模板
【代码】C++模板。原创 2023-08-15 10:56:05 · 29 阅读 · 0 评论 -
C++异常(try_catch)
public:将一个类型的指针转换为另一个类型的指针,它也允许从一个指针转换为整数类型const_castconst指针与普通指针间的相互转换,注意:不能将非常量指针变量转换为普通变量主要用于基本类型间的相互转换,和具有继承关系间的类型转换只有类中含有虚函数才能用dynamic_cast;仅能在继承类对象间转换dynamic_cast具有类型检查的功能,比static_cast更安全class Apublic:public:int main()原创 2023-08-15 10:34:24 · 53 阅读 · 0 评论 -
C++多态
虚析构函数:当基类指针指向派生类对象时,如果基类中的析构函数不是虚函数,只会调用基类的析构函数,而不会调用派生类的析构函数。通过将基类的析构函数声明为虚函数,可以确保在删除派生类对象时,会先调用派生类的析构函数,再调用基类的析构函数。多态数组和容器:C++的容器类(如vector、list、map等)可以存储基类指针或引用,从而可以存储不同派生类的对象。通过使用多态,可以实现对不同派生类对象的统一管理和操作。总的来说,C++多态的应用可以提高代码的灵活性和可扩展性,使得程序能够更好地适应不同的需求和变化。原创 2023-08-14 23:24:07 · 35 阅读 · 0 评论 -
C++ 标准输入输出流、组合与继承
通过继承,新类可以继承父类的属性和方法,并可以添加自己的特性。总结来说,C++是一种支持面向对象编程的语言,通过封装、继承和多态等特性,可以更好地组织和管理代码,提高代码的可重用性、可扩展性和可维护性。除了封装、继承和多态,C++还提供了其他一些面向对象的特性,如构造函数和析构函数、运算符重载、模板等,用于进一步增强面向对象编程的能力。通过多态,可以以统一的方式处理不同类型的对象,提高代码的灵活性和可扩展性。通过封装,可以隐藏实现细节,只暴露必要的接口给外部使用,提高代码的安全性和可维护性。原创 2023-08-14 22:21:37 · 67 阅读 · 0 评论 -
C++运算符重载及组合与继承
C++准许以运算符命名函数!!!运算符重载是指在编程语言中,通过定义类的成员函数或全局函数来改变原有运算符的行为。通过运算符重载,可以使得用户自定义的类对象能够像基本类型一样进行运算操作。运算符重载的概念包括以下几个方面:对于类对象,可以通过成员函数或全局函数重载运算符。例如,可以定义一个类的成员函数来重载"+"运算符,使得两个对象相加时能够按照自定义的方式进行运算。运算符重载可以改变运算符的操作数数量。例如,可以定义一个全局函数来重载"-"运算符,使得它可以接受一个参数或两个参数进行运算。原创 2023-08-14 21:40:06 · 87 阅读 · 0 评论 -
从C到C++及类与对象
GUI框架开发语言美观度移植性亮点miniGUIC/C++一般一般国产资源占用少操作硬件底层方便QTC/C++很好很好开源资源占用较少操作硬件底层方便Androidjava很好差用户基数大大公司可靠较好.NETC#很好较好用户基数大大公司可靠较好。原创 2023-08-14 19:14:00 · 43 阅读 · 0 评论 -
QT学习笔记3
派生类的成员也只能访问基类中的 oublic/protected 成员,而不能访问 private 成员;派生类的对象不能访问基类中的任何的成员。派生类的成员只能访问基类中的 oublic/protected 成员,而不能访问 private.成员;1. C++中的类是一种构造类型,与 C 语言的结构体相似,但是进行了一些扩展,类的成员不但可以是变量,还可以是函数;在同一个作用域内,声明几个功能类似以的同名函数,并且这些同名函数的参数个数、参数类型或者参数顺序不同,或者函数返回类型不同,那么就叫函数重载。原创 2023-05-01 00:12:49 · 385 阅读 · 0 评论 -
C++学习笔记12_核心编程(类和对象)
*示例2:**设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号。在C++中 struct和class唯一的**区别**就在于 **默认的访问权限不同** 具有相同性质的==对象==,我们可以抽象称为==类==,人属于人类,车属于车类。**语法:** `class 类名{ 访问权限: 属性 / 行为 };**优点1:**将所有成员属性设置为私有,可以自己控制读写权限。**优点2:**对于写权限,我们可以检测数据的有效性。* class 默认权限为私有。原创 2023-04-30 09:45:58 · 25 阅读 · 0 评论 -
C++学习笔记11_核心编程
函数参数**类型不同** 或者 **个数不同** 或者 **顺序不同**C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置。在现阶段函数的占位参数存在意义不大,但是后面的课程中会用到该技术。**语法:** `返回值类型 函数名 (数据类型){}`**注意:** 函数的返回值不可以作为函数重载的条件。在C++中,函数的形参列表中的形参是可以有默认值的。**作用:**函数名可以相同,提高复用性。* 函数重载碰到函数默认参数。**函数重载满足条件:*** 引用作为重载条件。原创 2023-04-30 09:40:36 · 25 阅读 · 0 评论 -
C++学习笔记10_核心编程
结论:C++推荐用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了。引用的语法更清楚简单。**作用:**函数传参时,可以利用引用的技术让形参修饰实参。本质:**引用的本质在c++内部实现是一个指针常量.****作用:**常量引用主要用来修饰形参,防止误操作。**语法:** `数据类型 &别名 = 原名`作用:引用是可以作为函数的返回值存在的。**优点:**可以简化指针修改实参。注意:**不要返回局部变量引用*** 引用在初始化后,不可以改变。**作用: **给变量起别名。原创 2023-04-29 23:45:44 · 21 阅读 · 0 评论 -
C++学习笔记9_核心编程
堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符 ==delete== 利用new创建的数据,会返回该数据对应的类型的指针。C++中利用==new==操作符在堆区开辟数据。 语法:` new 数据类型`原创 2023-04-29 23:41:22 · 23 阅读 · 0 评论 -
C++学习笔记8_核心编程
代码区是**共享**的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。 代码区是**只读**的,使其只读的原因是防止程序意外地修改了它的指令。在程序编译后,生成了exe可执行程序,**未执行该程序前**分为两个区域。 全局区还包含了常量区, 字符串常量和其他常量也存放在此.* 常量区中存放 const修饰的全局常量 和 字符串常量。- 代码区:存放函数体的二进制代码,由操作系统进行管理的。C++程序在执行时,将内存大方向划分为**4个区域**原创 2023-04-29 23:39:36 · 26 阅读 · 0 评论 -
C++学习笔记7
添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人。思路:根据用户不同的选择,进入不同的功能,可以选择switch分支结构,将整个架构进行搭建。* 显示联系人:显示通讯录中所有联系人信息。* 删除联系人:按照姓名进行删除指定联系人。* 查找联系人:按照姓名查看指定联系人信息。* 修改联系人:按照姓名重新修改指定联系人。* 清空联系人:清空通讯录中所有信息。* 退出通讯录:退出当前使用的通讯录。功能描述:退出通讯录系统。原创 2023-04-29 19:32:19 · 35 阅读 · 0 评论 -
C++学习笔记6
*语法:**` struct 结构体名 数组名[元素个数] = { {} , {} , ... {} }`设计学生和老师的结构体,其中在老师的结构体中,有老师姓名和一个存放5名学生的数组作为成员。创建结构体数组,数组中存放5名英雄。**例如:**每个老师辅导一个学员,一个老师的结构体中,记录一个学生的结构体。**总结:**在结构体中可以定义另一个结构体作为成员,用来解决实际问题。**语法:**`struct 结构体名 { 结构体成员列表 };**作用:** 结构体中的成员可以是另一个结构体。原创 2023-04-29 19:02:56 · 22 阅读 · 0 评论 -
C++学习笔记5
技巧:看const右侧紧跟着的是指针还是常量, 是指针就是常量指针,是常量就是指针常量。例如数组:int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };**案例描述:**封装一个函数,利用冒泡排序,实现对整型数组的升序排序。**作用:**利用指针作函数参数,可以修改实参的值。1. const修饰指针 --- 常量指针。2. const修饰常量 --- 指针常量。3. const即修饰指针,又修饰常量。**作用:**利用指针访问数组中元素。const修饰指针有三种情况。原创 2023-04-29 18:49:46 · 18 阅读 · 0 评论 -
C++学习笔记4
指针变量可以通过" * "操作符,操作指针变量指向的内存空间,这个过程称为解引用。> 总结:空指针和野指针都不是我们申请的空间,因此不要访问。> 总结3:对指针变量解引用,可以操作指针指向的内存。**空指针**:指针变量指向内存中编号为0的空间。**指针的作用:** 可以通过指针间接访问内存。* 普通变量存放的是数据,指针变量存放的是地址。指针变量定义语法: `数据类型 * 变量名;**注意:**空指针指向的内存是不可以访问的。**野指针**:指针变量指向非法的内存空间。**用途:**初始化指针变量。原创 2023-04-29 18:31:34 · 24 阅读 · 0 评论 -
C++学习笔记3
*作用:** 告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。* 函数的**声明可以多次**,但是函数的**定义只能有一次**1. 创建后缀名为.h的头文件。2. 创建后缀名为.cpp的源文件。**作用:**让代码结构更加清晰。函数分文件编写一般有4个步骤。3. 在头文件中写函数的声明。4. 在源文件中写函数的定义。原创 2023-04-29 18:18:23 · 23 阅读 · 0 评论 -
C++学习笔记2(二维数组)
2. `数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };3. `数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};4. ` 数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};> 建议:以上4种定义方式,利用==第二种更加直观,提高代码的可读性==1. ` 数据类型 数组名[ 行数 ][ 列数 ];* 值传递时,==如果形参发生,并不会影响实参==常见的函数样式有4种。原创 2023-04-29 18:14:20 · 82 阅读 · 0 评论 -
字符数组中数组元素为数字的数组遍历问题总结
#include <stdio.h>#include <string.h>void main(void){ int i; char ch = '1'; char buff[] = {'1', '2', '0', 4, 7, 8}; //"asdfasdf"; //{1, 2, 0, 4, 7, 8}; int j = sizeof(buff) / sizeof(buff[0]); // printf("%d\n", j); //.原创 2022-05-20 22:15:45 · 704 阅读 · 0 评论 -
extern 与头文件(*.h)的区别和联系
用#include可以包含其他头文件中变量、函数的声明,为什么还要 extern 关键字?如果我想引用一个全局变量或函数a,我只要直接在源文件中包含 #include<xxx.h> (xxx.h包含了a的声明)不就可以了么,为什么还要用 extern 呢?这个问题一直也是似是而非的困扰着我许久,经过实践和查找资料,有如下总结:一、头文件首先说下头文件,其实头文件对计算机而言没什么作用,她只是在预编译时在#include的地方展开一下,没别的意义了,其实头文件主要是给别人看...原创 2022-05-09 15:17:12 · 105 阅读 · 0 评论 -
C 语言中 static 的作用
在 C 语言中,static 的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加 static 前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是 a.c,另一个是 main.c。下面是 a.c 的内容:a.c 文件代码chara='A';// global variablevoidmsg(){ printf("Hello\n");...原创 2022-05-09 14:56:43 · 150 阅读 · 0 评论 -
8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL)
log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。ALL 最低等级的,用于打开所有日志记录。TRACE designates finer-grained informational events than the DEBUG.Since:1.2.12,很低的日志级别,一般不会使用。DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一原创 2022-05-09 14:55:10 · 3470 阅读 · 0 评论 -
#、##、__VA_ARGS__的使用
C 语言 define 变参__VA_ARGS__使用在C语言的标准库中,printf、scanf、sscanf、sprintf、sscanf这些标准库的输入输出函数,参数都是可变的。在调试程序时,我们可能希望定义一个参数可变的输出函数来记录日志,那么用可变参数的宏是一个不错的选择。在C99中规定宏也可以像函数一样带可变的参数,如:#define LOG(format, ...) fprintf(stdout, format, __VA_ARGS__) 其中,...表示可变参数列表,_.转载 2022-05-09 14:54:31 · 178 阅读 · 0 评论 -
virtual虚方法、派生类
virtual 修饰符,该修饰符表明:该基类的派生类可以重载该方法。 virtual 修饰的方法的作用:输出语句"这是一个虚方法!"到控制台。原创 2022-05-09 14:52:33 · 83 阅读 · 0 评论 -
:在.h文件中的作用是继承,:在cpp文件 中是初始化列表。
在.h文件中:class AccessJson:public JsonHandle{在.cpp文件中: :m_Comm(0) , m_DevIdx(-1)原创 2022-05-09 14:51:52 · 76 阅读 · 0 评论 -
namespace介绍
命名空间命名空间 namespace1、::作用域运算符(表明 数据、方法 的归属性问题)2、命名空间 namespace 解决命名冲突2.1:namespace命名空间的定义2.2:命名空间只能全局范围内定义(以下错误写法)2.3:命名空间可嵌套命名空间2.4:命名空间是开放的,即可以随时把新的成员加入已有的命名空间中(常用)2.5:命名空间 可以存放 变量 和 函数2.6:命名空间中的函数 可以在“命名空间”外 定义2.7:无名命名空间,意味着命名空间中的标识符只能在本文件内访问,相转载 2022-05-09 14:51:00 · 6111 阅读 · 1 评论 -
VS Code快捷键
(1)Window版快捷键·注释:单行注释:ctrl+kctrl+c或ctrl+/。取消单行注释:ctrl+kctrl+u(按下ctrl不放,再按k+u)。多行注释:alt+shift+A 。多行注释:/**/·移动行:alt+up/down ·显示/隐藏左侧目录栏ctrl+b ·复制当前行:shift+alt+up/down ·删除当前行:shift+ctrl+k ·ctrl+x控制台终端显示与隐藏:ctrl+·查找文件/安装vscode插件地址:ctrl+p ·原创 2022-05-04 09:26:43 · 186 阅读 · 0 评论 -
C++对象模型和this指针
### 4.3 C++对象模型和this指针#### 4.3.1 成员变量和成员函数分开存储在C++中,类内的成员变量和成员函数分开存储只有非静态成员变量才属于类的对象上#if 0#include<iostream>using namespace std;#include<string>class Person {public: Person() { mA = 0; } //非静态成员变量占对象空间 int mA; //静态成员变量不占对象原创 2022-04-29 13:18:25 · 48 阅读 · 0 评论 -
C++类和对象-对象特性-静态成员-静态成员函数
#### 4.2.8 静态成员静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员静态成员分为:* 静态成员变量 * 所有对象共享同一份数据 * 在编译阶段分配内存 * 类内声明,类外初始化* 静态成员函数 * 所有对象共享同一个函数 * 静态成员函数只能访问静态成员变量#if 1#include<iostream>using namespace std;#include<string>c...原创 2022-04-29 07:18:29 · 72 阅读 · 0 评论 -
C++ 初始化列表、类对象作为类成员
#### 4.2.6 初始化列表**作用:**C++提供了初始化列表语法,用来初始化属性**语法:**`构造函数():属性1(值1),属性2(值2)... {}`#if 1#include<iostream>using namespace std;#include<string>class Person {public: ////传统方式初始化 //Person(int a, int b, int c) { // m_A = a; // ..原创 2022-04-27 19:53:47 · 143 阅读 · 0 评论 -
C++深拷贝与浅拷贝
#### 4.2.5 深拷贝与浅拷贝深浅拷贝是面试经典问题,也是常见的一个坑浅拷贝:简单的赋值拷贝操作深拷贝:在堆区重新申请空间,进行拷贝操作#if 1#include<iostream>using namespace std;#include<string>class Person {public: //无参(默认)构造函数 Person() { cout << "无参构造函数!" << endl; } //有参.原创 2022-04-27 15:48:58 · 110 阅读 · 0 评论 -
C++构造函数调用规则
#### 4.2.4 构造函数调用规则默认情况下,c++编译器至少给一个类添加3个函数1.默认构造函数(无参,函数体为空)2.默认析构函数(无参,函数体为空)3.默认拷贝构造函数,对属性进行值拷贝构造函数调用规则如下:* 如果用户定义有参构造函数,c++不在提供默认无参构造,但是会提供默认拷贝构造* 如果用户定义拷贝构造函数,c++不会再提供其他构造函数#if 1#include<iostream>using namespace std;#include转载 2022-04-27 15:00:59 · 66 阅读 · 0 评论 -
C++拷贝构造函数调用时机
#### 4.2.3 拷贝构造函数调用时机C++中拷贝构造函数调用时机通常有三种情况* 使用一个已经创建完毕的对象来初始化一个新对象* 值传递的方式给函数参数传值* 以值方式返回局部对象#if 1#include<iostream>using namespace std;#include<string>//C++中拷贝构造函数调用时机通常有三种情况//* 使用一个已经创建完毕的对象来初始化一个新对象//* 值传递的方式给函数参数传值//* 以值方.转载 2022-04-27 14:02:32 · 152 阅读 · 0 评论 -
C++类和对象-对象特性-初始化列表、构造函数的分类及调用、拷贝构造函数调用时机
### 4.2 对象的初始化和清理* 生活中我们买的电子产品都基本会有出厂设置,在某一天我们不用时候也会删除一些自己信息数据保证安全* C++中#### 4.2.1 构造函数和析构函数对象的**初始化和清理**也是两个非常重要的安全问题 一个对象或者变量没有初始状态,对其使用后果是未知 同样的使用完一个对象或变量,没有及时清理,也会造成一定的安全问题c++利用了**构造函数**和**析构函数**解决上述问题,这两个函数将会被编译器自动调用,完成对象初始化和清理工作。对象..原创 2022-04-27 13:49:11 · 128 阅读 · 0 评论 -
C++类和对象-封装-c++中class和struct的区别、成员属性设置为私有、
#### 4.1.2 struct和class区别在C++中 struct和class唯一的**区别**就在于 **默认的访问权限不同**区别:* struct 默认权限为公共* class 默认权限为私有#if 1#include<iostream>using namespace std;#include<string>//struct 和class得区别//struct 默认权限为公共 public //class 默认权限为私有 pr.原创 2022-04-27 11:54:25 · 231 阅读 · 0 评论 -
C++类和对象---封装(1)
C++面向对象的三大特性为:==封装、继承、多态==C++认为==万事万物都皆为对象==,对象上有其属性和行为**例如:** 人可以作为对象,属性有姓名、年龄、身高、体重...,行为有走、跑、跳、吃饭、唱歌... 车也可以作为对象,属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调... 具有相同性质的==对象==,我们可以抽象称为==类==,人属于人类,车属于车类### 4.1 封装#### 4.1.1 封装的意义封装是C++面向对象三大特...原创 2022-04-26 16:45:16 · 49 阅读 · 0 评论 -
C++函数提高
### 3.1 函数默认参数在C++中,函数的形参列表中的形参是可以有默认值的。语法:` 返回值类型 函数名 (参数= 默认值){}#if 1#include<iostream>using namespace std;#include<string>//函数默认参数int func(int a, int b = 10, int c = 10) { return a + b + c;}//语法:返回值类型 函数名 (参数= 默认值){}//1. 如果原创 2022-04-26 11:25:47 · 69 阅读 · 0 评论 -
C++引用
### 2.1 引用的基本使用**作用: **给变量起别名**语法:** `数据类型 &别名 = 原名`#if 1#include<iostream>using namespace std;#include<string>int main() { //引用的基本语法 //数据类型 &别名 = 原名 int a = 10; //创建引用 int& b = a; cout << "a = " <.原创 2022-04-26 10:35:45 · 77 阅读 · 0 评论 -
C++内存分区模型
C++程序在执行时,将内存大方向划分为**4个区域**- 代码区:存放函数体的二进制代码,由操作系统进行管理的- 全局区:存放全局变量和静态变量以及常量- 栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等- 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收**内存四区意义:**不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程### 1.1 程序运行前 在程序编译后,生成了exe可执行程序,**未执行该程序前**分为两个区域...原创 2022-04-25 11:04:18 · 1810 阅读 · 0 评论