| |
|
开发:
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++(万字总结) |
一、基础部分1、C++编写步骤编写一个C++程序总共分为4个步骤:创建项目->创建文件->编写代码->运行程序
2、注释1)单行注释:通常放在一行代码的上方,或一条语句的末尾,对该行代码说明。
2)多行注释:通常放在一段代码的上方,对该段代码做整体说明。
3、变量作用:给一段指定的内存空间起名,方便操作这段内存。 语法:数据类型?? ?变量名=初始值;
4、常量作用:用于记录程序中不可更改的数据。 1)#define 宏常量:通常在文件上方定义,表示一个常量。 #define 常量名 常量值 2)const修饰的变量:通常在变量定义前加关键字const,修饰该变量为常量,不可修改。 const 数据类型 常量名 = 常量值 5、关键字关键字是C++中预先保留的单词(标识符)在定义变量或常量时,不要使用关键字。 sizeof关键字作用:利用sizeof关键字可以统计数据类型所占内存大小 语法:sizeof(数据类型/变量)
6、标识符命名规则1)标识符不能是关键字; 7、数据类型C++规定在创建一个变量或常量时,必须要指出对应的数据类型,否则无法给变量分配内存。 转义字符作用:用于表示一些不显示出来的ASCII字符 常用转义字符: ?? ?\n(换行)?? ??? ?\\(反斜线)?? ??? ?\t(水平制表) 数据的输入作用:用于从键盘获取数据 关键字:cin 语法:cin >> 变量 7.1、整型作用:整型变量表示的是整数类型的数据。 数据类型?? ??? ??? ??? ??? ??? ??? ?占用空间?? ??? ??? ??? ??? ? 整型大小比较:short < int <= long <= long long 7.2、浮点型作用:用于表示小数。 浮点类型数据变量分为两种:1)单精度 float 2)双精度 double
两者的区别在于表示的有效数字范围不同: 数据类型?? ??? ??? ?占用字节?? ??? ?有效数字范围 默认情况下,输出一个小数,会显示出6位有效数字。 7.3、字符型作用:字符型变量用于显示单个字符。 语法:char ch = ‘a'; 注意: ? ?1)在显示字符串变量时,用单引号将字符括起来,不要用双引号; ????????????????2)单引号内只能有一个字符,不可以是字符串。 C和C++中字符型变量只占用一个字节。 字符变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放到存储单元。 7.4、字符串类型作用:用于表示一串字符。 C风格字符串:char 变量名[ ] = “字符串”; C++风格字符串:string 变量名 = “字符串值”;(使用C++风格字符串时候,要包含#include <string> 这个头文件) 7.8、布尔类型作用:布尔数据类型代表真或假的值。 bool类型只有两个值:true—真(本质是1) flase—假(本质是0) bool类型占1个字节大小。 8、运算符作用:用于执行代码的运算。 运算符类型?? ??? ??? ??? ??? ??? ??? ?作用?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?运算符 9、程序流程结构C/C++支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。
9.1、选择结构1)if语句 作用:执行满足条件的语句 单行格式if语句:
多行格式if语句:
多条件的if语句:
2)嵌套if语句 在if语句中,可以嵌套使用if语句,达到更精准的条件判断。 3)三目运算符 作用:通过三目运算符实现简单的判断 语法:表达式1 ?表达式2:表达式3 如果表达式1的值为真,执行表达式2,并返回表达式2的结果; 如果表达式1的值为假,执行表达式3,并返回表达式3的结果。 4)switch语句 作用:执行多条件分支语句。
9.2、循环结构-while作用:满足循环条件,执行循环语句。
9.3、do-while循环语句作用:满足循环条件,执行循环语句。
注意:与while的区别在于do-while会先执行一次循环语句,再判断循环条件。
9.4、for循环作用:满足循环条件,执行循环语句。
注意:for循环体中的表达式,需要用分号进行分隔。 9.5、嵌套循环作用:在循环中再嵌套一层循环,解决一些实际问题。
9.6、跳转语句—break语句作用:用于跳出选择结构或循环结构 break使用时机:
9.7、跳转语句—continue语句作用:在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环。 注意:continue并没有使整个循环终止,而break会跳出循环。 10、数组所谓数组,就是一个集合,里面存放了相同类型的数据元素。 特点:1)数组中每个数据元素都是相同的数据类型; 2)数组是由连续的内存位置组成的。 10.1、一维数组一维数组定义方式:
数组名的命名规范与变量名命名规范一致,不要和变量名重名。 数组中下标是从0开始索引。 一维数组数组名用途:
10.2、二维数组二维数组就是在一维数组上,多加一个维度。 4种定义方式: 二维数组名组名用途:1)查看二维数组所占内存空间;2)获取二维数组首地址 11、函数作用:将一段经常使用的代码封装起来,减少重复代码。 11.1、函数的定义函数定义的步骤: 返回值类型 -> 函数名 -> 参数列表 -> 函数体语句 -> return表达式
返回值类型:一个函数可以返回一个值,在函数定义中。 函数名:给函数起的名称。 参数列表:使用该函数时,传入的数据。 函数体语句:花括号内的代码,函数内需要执行的语句。 return表达式:和返回值类型挂钩,函数执行完后,返回相应的数据。 11.2、函数的调用功能:使用定义好的函数。 语法:函数名(参数) 11.3、值传递所谓值传递,就是在函数调用时实参将数值传入给形参。 值传递时,如果形参发生改变,并不会影响实参。
11.4、函数的常见形式无参无返 有参无返 无参无返 有参有返 11.5、函数的声明作用:告诉编译器函数名称及如何调用函数,函数主体可以单独定义。 函数的声明可以多次,但函数的定义只能有一次。 11.6、函数的分文件编写作用:让代码结构更加清晰。 函数分文件编写一般步骤: 12、指针作用:可以通过指针间接访问内存 内存编号是从0开始记录的,一般用十六进制数字表示。 可以利用指针变量保存地址。 12.1、指针定义和使用语法:数据类型 * 指针变量名
使用指针:可以通过引用的方式来找到指针指向的内存。
指针所占内存的空间:32位占用4个字节空间; 64位占用8个字节空间 12.2、空指针空指针:指针变量指向内存中编号为0的空间 用途:初始化指针变量 注意:空指针指向的内存是不可以访问的。
12.3、const修饰指针const修饰指针的三种情况: 常量指针特点:指针的指向可以修改,但指针指向的值不可以改。
指针常量特点:指针的指向不可以改,指针指向的值可以改。
const即修饰指针,又修饰常量:指针的指向和指针指向的值都不可以改。 技巧:看const右侧紧跟的是指针还是常量,是指针就是常量指针,是常量就是指针常量。 13、结构体结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。
通过结构体创建变量的方式有3种:
总结: 定义结构体时的关键字是struct,不可省略; 结构体变量利用操作符“.”访问成员。 struct和class的区别:在C++中struct和class唯一的区别在于默认的访问权限不同。struct默认权限为公有,class默认私有。 13.1、结构体数组作用:将自定义的结构体放到数组中方便维护。 语法:struct 结构体名 数组名[元素个数] = {{},{},{},...}
13.2、结构体指针作用:通过指针访问结构体中的成员。 利用操作符“ -> ”可以通过结构体指针访问结构体属性。
13.3、结构体嵌套结构体作用:结构体中的成员可以是另一个结构体。
13.4、结构体做函数参数作用:将结构体作为参数向函数中传递 传递方式: 值传递 地址传递
如果不想修改主函数中的数据,用值传递,反之用地址传递。 二、提高部分1、内分区模型C++程序在执行时,将内存大方向划分为4个区域。 代码区:存放函数体的二进制代码,由操作系统进行管理。 1.1、程序运行前在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域: 1)代码区:存放CPU执行的机器指令。代码区是共享的,只读的。 2)全局区:存放全局变量、静态变量、常量。该区域的数据在程序结束后由操作系统释放。 1.2、程序运行后1)栈区:由编译器自动分配释放,存放函数的参数值,局部变量等。 2)堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。 2、引用作用:给变量起别名。 语法:数据类型 &别名 = 原名
注意:1)引用必须初始化;2)引用在初始化后,不可以改变。
引用的本质:引用的本质在C++内部实现是一个指针常量。 2.1、引用做函数参数作用:函数传参时,可以利用引用让形参修饰实参。
3、函数提高3.1、函数默认参数语法: 返回值类型 函数名(参数 = 默认值){}
注意: 1)如果某个函数参数有默认值,那么从这个位置往后,从左向右,必须都要有默认值; 2)如果函数声明有默认值,函数实现的时候就不能有默认参数。 3.2、函数重载作用:函数名可以相同,提高复用性。 函数重载满足条件:1)同一个作用域下;2)函数名相同;3)函数参数类型不同或个数不同或顺序不同 4、封装C++面向对象三大特性:封装、继承、多态。C++认为万事万物都皆为对象,对象上有其属性和行为。 封装的意义:1)将属性和行为作为一个整体,表现生活中的事物 封装意义一:在设计类的时候,属性和行为写在一起,表现事物。 语法:class 类名{访问权限:属性/行为};
类中的属性和行为,统一称为成员。 属性:成员属性,成员变量。 行为:成员函数,成员方法。 封装意义二:类在设计时,可以把属性和行为放在不同的权限下,加以控制。 三种权限: 成员属性设置为私有优点:
5、构造函数和析构函数5.1、构造函数主要作用于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用。 语法:类名(){}
5.2、析构函数主要作用于对象销毁前系统自动调用,执行一些清理工作。 语法: ~类名(){}
5.3、构造函数的分类及调用两种分类方式: 三种调用方式:1)括号法; 2)显示法; 3)隐式转换法
5.4、拷贝构造函数调用时机C++中拷贝构造函数调用时机通常有三种情况:
5.5、深拷贝与浅拷贝浅拷贝:简单的赋值拷贝操作 深拷贝:在堆区重新申请空间,进行拷贝操作。 浅拷贝带来的问题:堆区的内存重复释放。 浅拷贝的问题要利用深拷贝进行解决:
总结:如果属性有在堆区开辟的,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题。 5.6、初始化列表作用:C++提供了初始化列表语法,用来初始化属性。 语法:构造函数():属性1(值1),属性2(值2)...{}
5.7、静态成员静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员。 静态成员分为: 5.8、const修饰成员函数1)常函数:成员函数后加const后我们称这个函数为常函数 常函数内一般不可修改成员属性,成员函数声明时加关键字mutable后,在常函数中依然可以修改。 2)常对象:声明对象前加const称该对象为常对象。 常对象只能调用常函数。 6、友元友元的目的是让一个函数或类访问另一个类中的私有成员。 友元的关键字:friend 友元的三种实现:1)全局函数做友元;2)类做友元;3)成员函数做友元
7、继承继承的好处:减少重复代码。 语法:class 子类:继承方式 父类 子类也称为派生类;父类也称为基类。 派生类的成员,包含两大部分:一类是从基类继承过来的;一类是自己增加的成员。 从基类继承过来的表现其共性,新增成员体现其个性。 7.1、继承方式继承方式一共有3种:公共继承;保护继承;私有继承 父类所有非静态成员属性都会被子类继承下去。 7.2、继承中构造和析构顺序子类继承父类后,当创建子类对象,也会调用父类的构造函数。 继承中构造和析构函数顺序:先构造父类,再构造子类,析构顺序与构造顺序相反。 7.3、继承同名成员处理方式访问子类同名成员:直接访问即可。
访问父类同名成员:需要加作用域。
小结:1)子类对象可以直接访问子类中同名成员; 2)子类对象加作用域可以访问到父类同名成员; 3)当子类与父类拥有同名的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数。 7.4、多继承C++允许一个类继承多个类。 语法:class 子类:继承方式 父类1,继承方式 父类2,... 多继承可能会引发父类中有同名成员出现,需要加作用域区分。实际开发不建议使用多继承。 8、多态多态定义: 同一种行为(调用)导致的不同的结果。 虚函数:虚函数是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。
多态分类:1)静态多态:函数重载和运算符重载都属于静态多态,复用函数名; 2)动态多态:派生类和虚函数实现运行多态。 静态多态和动态多态的区别:
动态多态满足条件:1)有继承关系;2)子类需要重写父类虚函数 动态多态的使用:父类的指针或指引指向子类对象。
重写:函数返回值类型 函数名 参数列表完全一致称为重写。 多态优点:1)代码组织结构清晰; 2)可读性强; 3)利于前期和后期的拓展和维护。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/11 12:32:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |