IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++学习笔记 -> 正文阅读

[C++知识库]c++学习笔记

6/12
整数不大时所占字节为4个字节(该整数不为变量)

当visual c提示找不到文件时,可能是所创建的程序类型错误,应改换另一种类型的程序
6/13
用float定义变量时,数值后最好加f
如:float f1=4.12f;

用double定义变量时,数值后一般不加字母
如:double d1=4.03;

char定义字符型变量时,只能定义单个字符,且必须用英文格式的单引号
如:char ch='c';

"\\"输出一个"\"

"\t"固定格式

用char定义字符串时,例:char sh[]="skals";
用char定义字符串时,写char sh[];是错误的,必须在定义的同时给字符串赋值。
如果不想在定义的同时赋值,就要在[]中加数字,如:char a[2];但是,这样在定义的时候就把可输入数据的最大长度确定了
char定义的字符串所占字节为字符串长度加一

用string定义字符串时,例:string sh="sjajsj2";
用string定义字符串必须引用头文件<string>,即必须在所写代码最前面写一行:#include <string>
string定义的字符串所占字节固定为28个,即使字符串长度超过28,也可以正常使用(在x86系统中)
而在x64系统中,string定义字符串所占字节固定为40个

bool定义数据为布尔型,只有false(0)和true(1)两种值,该数据类型固定占用一个字节
在具体赋值时,也可直接给与bool类型数据整数。当被给予的为非零数时,该数据为true(1);当被给予的数为零时,该数据为false(0)。(非零即真)
6/14
两个浮点数之间不能取模
只有整型可以进行取模运算

递减放前面,先减一后再使用;递减放后面,先使用再减一。递增相同

在比较运算符中,除<和>外,其他皆由两个符号组成

在c++中,只要不是0,皆为真

!置于表达式之前,使得布尔值变为原来相反的值
&&同真才为真,其他全为假
||同假才为假,其他全为真

if条件后面不能加分号

函数写完时,最后必须给一个返回值(如果函数前的标识为void,则不需要)

三目运算符中,可像这样写:
? ? int a141 = 30;
? ? int a142 = 20;
? ? (a141 > a142 ? a141 : a142) = 100;
这样a141就会被赋值100,即在三目表达式中,返回值被赋值后又可以像以上一样再被赋值一次(在上述式子中,a141为返回值)

switch语句执行效率比if语句执行效率高
switch语句一般要搭配break语句使用
switch语句表达式类型只能是整型或字符型
6/16
值传递的时候,形参发生任何改变,都不会影响实参

指针定义语法:数据类型 *指针变量名
指针变量也有自己的地址
不能直接使得非指针变量为地址值,如:int a=&k;是错误的
指针的数据类型必须与所指数据的数据类型相同
6/17
0-255内存系统占用,无法访问

在程序中,要尽量避免出现野指针,出现后运行即报错

常量指针的指向可以修改,但是指针指向的值不可以修改

指针常量的指向不可以修该,但是指针指向的值可以修改

结构体定义语句末尾要加“;”
6/19
使用switch语句时,必须加上{},不然可能出现错误
因为{}限定了switch语句中命令的使用范围,如果不加{},switch语句中的命令就会在上一个大括号的范围内执行
如:
while (1)
?? ?{
?? ??? ?showmenu();
?? ??? ?cin >> select;
?? ??? ?switch (select)
?? ??? ?{
?? ??? ?case 1://添加联系人
?? ??? ??? ?break;
?? ??? ?case 2://删除联系人
?? ??? ??? ?break;
?? ??? ?case 3://显示联系人
?? ??? ??? ?break;
?? ??? ?case 4://修改联系人
?? ??? ??? ?break;
?? ??? ?case 5://查找联系人
?? ??? ??? ?break;
?? ??? ?case 6://清空联系人
?? ??? ??? ?break;
?? ??? ?case 0://退出程序
?? ??? ??? ?cout << "退出成功" << endl;
?? ??? ??? ?return 0;
?? ??? ??? ?break;
?? ??? ?}
?? ?}
在以上程序中,break语句不会打断循环
而:
while (1)
?? ?{
?? ??? ?showmenu();
?? ??? ?cin >> select;
?? ??? ?switch (select)
?? ??? ?case 0://退出程序
?? ??? ??? ?cout << "退出成功" << endl;
?? ??? ??? ?break;
?? ?}
在以上语句中,break语句会打断循环

另外,如果switch后不加{},则switch语句后只能跟一段分行,所以switch语句必须加上{}

6/20
c++内存四区:
代码区:存放函数体的二进制代码,由操作系统进行管理的
全局区:存放全局变量和静态变量以及常量
栈区:由编译器自动分配释放,存放函数的参数值,局部变量等
堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收

在普通变量前面加static,属于静态变量

在全局区中的量:全局变量?? ?静态变量(static关键字)?? ?字符串常量?? ?const修饰的全局变量(全局常量)
不在全局区中的量:局部变量?? ?const修饰的局部变量(局部常量)

在函数中,严禁返回局部变量的地址

局部变量和形参数据会存放在栈区

运用new运算符时,new int(10)代表的是一个指向10变量的地址
而new int[10]代表的是1个含10个数据的数组的首地址
释放数组时应在delete后加上[]

6/21

引用时使用的数据类型应与原变量的数据类型相同
引用时必须初始化
引用一旦初始化后,就不可以更改
引用传递,形参也会修饰实参
严禁返回局部变量的引用
引用可以使得函数调用作为左值
引用的本质是一个指针常量
常量引用用来修饰形参,防止误操作

函数的声明和实现只能有一个有默认参数
如果某个位置参数有默认值,那么从这个位置往后,从左向右,必须都要有默认值

6/22

函数重载的满足条件:
1、同一个作用域下
2、函数名称相同
3、函数参数类型不同,或者个数不同,或者顺序不同

函数的返回值不可以作为函数重载的条件

当函数重载碰到默认参数,出现二义性,报错,尽量避免这种情况

成员属性设置为私有的优点:
1、将所有成员属性设置为私有,可以自己控制读写权限
2、对于写权限,我们可以检测数据的有效性

不要利用拷贝构造函数,初始化匿名对象,会出现重定义
当前 行执行结束后,系统会立即回收掉匿名对象
调用无参构造函数不能加括号,如果加了,编译器认为这是一个函数声明

6/23

c++中拷贝构造函数调用时机通常有三种情况:
1、使用一个已经创建完毕的对象来初始化一个新对象
2、值传递的方式给函数参数传值
3、以值方式返回局部对象

默认情况下,c++编译器至少给一个类添加3个函数
1、默认构造函数(无参,函数体为空)
2、默认析构函数(无参,函数体为空)
3、默认拷贝构造函数,对属性进行值拷贝

构造函数调用规则如下:
1.如果用户定义有参构造函数,c++不再提供默认无参构造,但是会提供默认拷贝构造
2.如果用户定义拷贝构造函数,c++不会再提供其他构造函数

浅拷贝:简单的赋值拷贝操作
深拷贝:在堆区重新申请空间,进行拷贝操作
如果属性有在堆区开辟的,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题

当其他类对象作为本类成员,构造时候先构造类对象,再构造自身,析构顺序与构造相反

6/24

静态成员变量:(也有访问权限)
1、所有对象都共享同一份数据
2、编译阶段就分配内存
3、类内声明,类外初始化操作

静态成员函数可以访问静态成员变量,不可以访问非静态成员变量

空对象占用内存空间为:1
c++编译器会给每个空对象也分配一个字节空间,是为了区分空对象占内存的位置
每个空对象也应该有一个独一无二的内存地址

只有非静态成员变量属于类的对象上,其他都不属于

this的作用:
1、当形参和成员变量同名时,可以用this指针来区分
2、返回对象本身

在成员函数后面加const,修饰的是this指向,让指针指向的值也不可以修改

6/25

常对象不可以调用普通成员函数,只能调用常函数
常函数:
1、成员函数后加const后我们称为这个函数为常函数
2、常函数内不可以修改成员属性
3、成员属性声明时加关键字mutable后,在常函数中依然可以修改

运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型
对于内置的数据类型的表达式的运算符是不可能改变的
不要滥用运算符重载

只能利用全局函数重载左移运算符

重载后置递增时返回值,重载前置递增时返回引用
用int区分前置递增和后置递增,有int为后置递增,无int为前置递增

6/26

父类中所有非静态成员属性都会被子类继承下去
父类中私有成员属性,是被编译器给隐藏了,因此是访问不到,但是确实被继承下去了
继承中的构造和析构顺序:先构造父类,再构造子类,析构的顺序与构造的顺序相反

如果子类中出现和父类同名的成员函数,子类的同名成员会隐藏掉父类中所有同名成员函数
如果想访问到父类中被隐藏的同名成员函数,需要加作用域

子类对象可以直接访问到子类中同名成员
子类对象加作用域可以访问到父类同名成员

同名静态成员处理方式和非静态处理方式一样,只不过有两种访问的方式(通过对象和通过类名)
c++实际开发中不建议用多继承

当菱形继承,两个父类拥有相同数据,需要加以作用域区分

6/27

多态满足条件:1、有继承关系?? ?2、子类重写父类中虚函数
多态使用:父类指针或引用指向子类对象
静态多态与动态多态区别:
静态多态的函数地址早绑定--编译阶段确定函数地址;动态多态的函数地址晚绑定--运行阶段确定函数地址

父类指针在析构时候,不会调用子类中析构函数,导致子类如果有堆区属性,出现内存泄漏
利用虚析构可以解决父类指针释放子类对象时不干净的问题

6/28

对象cout是ostream类的一个实例,并且在main函数被调用之前已经创建
以#define开头的代码行是一条预处理器指令,它表示代码文本中任意标记为指定名称的符号都被替换为一个常量

6/30

无法打开源文件,可能是找不到文件路径。把头文件的绝对地址加上,无法打开源文件的问题就解决了。

7/29

冒泡排序:两个相邻数进行比较,依据大小进行交换,不断循环最后将所有的数排序
如何优化冒泡排序:1、计算交换次数,如果一趟循环后交换次数为零,则直接结束排序

选择排序:每趟循环将最小(大)的数置于最前(后),多次循环后将所有的数排序
如何优化选择排序:1、在一趟循环后,同时将最小和最大的值选取出来,置于数组边缘

7/30

插入排序:选择一个数,将这个数与这个数之前的数进行比较,找到合适位置将其插入其中,多次循环之后将所有数进行排序

希尔排序:(针对直接插入排序算法进行改进后的算法)设定一个元素间隔,按间隔进行分组后比较,依照大小进行交换。利用循环多次缩小间隔,进行比较、交换,最终将所有数排序
希尔排序核心思想--化远为近?? ?希尔排序优点:1、查找次数减少?? ?2、移动元素次数减少

8/1

快速排序:先从数列中取出一个元素作为基准数,扫描数列,将比基准数小的元素全部放到它的左边,大的或等于基准数的元素全部放到它的右边,得到左右两个区间,再对左右区间重复上述步骤,直到各区间少于两个元素
快速排序优化:1、采用更合理的基准数,减少递归深度?? ?2、结合插入排序,区间在10个元素之内采用插入排序,效率更高

归并排序:先将数据分组,在组内进行排序。再扩大单个组的数据容量,进行排序。多次重复之后将所有数据排序

面向对象三大特性:封装,继承和多态

8/2

起始迭代器:指向容器中第一个元素
结束迭代器:指向容器中最后一个元素的下一个位置

8/4

rfind从右往左查找,find从左往右查找

8/7

在类中,析构函数和构造函数必须公开

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-02 14:26:18  更:2021-10-02 14:27:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 21:36:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码