C++学习总结
开学已经一个多月了,说实话这一个多月学的编程知识我感觉比上个学期一学期都多,而且这学期也没有OJ的练习题了,知识掌握情况很不好,到现在为止之前学习的知识有很多已经忘了,感觉现阶段的知识总结很有必要,闲话少说我们步入正题。
首先介绍一下c++11部分新增内容,感觉挺好使的:
一:constexpr
- constexpr对象:声明常量表达式;形如:constexpr int size = 20; constexpr int limits=size + 10;
- constexpr 定义的变量如果没有明确要使用的地址,编译器可以选择不为其分配储存空间;而对于const定义的变量编译器一定会为其分配储存空间
二.auto - 用auto声明变量的类型,由编译器去自动分析表达式的类型,推断出变量的实际类型
- auto定义的变量必须有初值
3.适合定义不确定类型的变量
三.decltype
1.选择并返回操作数的类型(如:decltype(sizeof(int) size);size的类型就是sizeof(int)结果的类型)
2.编译器会分析表达式的类型,并不真正计算表达式的值
3.希望从表达式推断出要定义的变量的类型,但是又不想用这个表达式的值初始化该变量时,用decltype
四.range-for语句
1.语法形式:for( declaration : expression )
statement;
expression是要处理的序列(遍历)
初始值列表、数组、vector或string等类型的对象
declaration定义一个变量,表示序列中的每个元素
statement是一条语句或语句块,表示对元素的处理代码 - 使用范围for语句的时候要注意,在for的语句块内不应该改变正在遍历的序列的大小。可以理解为范围for是简化的for语句,而被省略的for循环初始化部分已经预存了序列的开头和结尾位置,因而不能再改变序列的大小了,例如不能向序列中加入元素或删除元素。
再来说一下指针(好用难学) - 指针变量是一种特殊的变量,变量中存放的不是某种数据 类型的数据,而是另一个变量或常量的地址。
- 定义:int pi;
或int pi; - 指针持有一个对象的地址,称为指针“指向”该对象
- 通过指针可以间接操纵它指向的对象
- 如果指针指向一个对象,则可以通过指针间接访该对象,使用指针解引用运算符“*”
- 空指针:int *p1 = nullptr;
int *p2 = 0;
int *p3 = NULL;
7.运算:同类型的指针可以进行相等(==)或不相等(!=)的比较操作,比较的结果是 布尔类型;指针可以进行加或减整数值的算术运算;自增、自减运算适用于指向数组元素的指针 - 注意:可以持有任何类型的地址值,即通用指针相关的值是个地址,但是该地址保存的对象类型不知道;不能操纵void指针指向的对象,只能传送该地址值或者和其他地址值进行比较;不允许void指针到其他类型指针的直接赋值
引用 - 一般的应用指的是左值引用(等号左边的)
- 可以理解为变量的别名,引用的所有操作相当于对变量的操作
- 不能定义引用的引用
- 右值引用:右值引用就是必须绑定到右值的引用
定义和初始化右值引用的形式
类型 &&右值引用变量 = 右值表达式;
右值引用由类型标识符和两个取地址符(&&)定义
右值引用必须被初始化,初始值是右值表达式
不能将右值引用直接绑定到一个左值上 - 右值引用只能绑定到一个将要被销毁的对象上
Const - const 数据类型 变量(变量不可改变)
- const 数据类型 指针(常指针)
- const 数据类型 引用(常引用)
- type* const 变量(指向非const对像的const指针)
- const type* const 变量(指向const对象的const指针)
- const type 函数明(){}(返回值为常量的函数)
- const type 函数明()const{}(常函数)
- const type 函数明(const int x){}(x为常量)
函数
1.函数定义的一般格式
<函数值类型> <函数名>(<形式参数表 >)
{语句序列 }
一个函数由函数头和函数体两部分构成。
函数头中通常包括函数名,形式参数表以及函数的返回值类型, 其中形式参数表必须包含在一对圆括号中。
函数体-由一对花括号扩起来的语句序列组成。
2.函数值类型-即函数的返回值类型
(1)返回简单类型 如:int、long 、float、double、char等
(2)返回结构类型 (3)返回指针类型 (4) 返回引用类型
注意:如果函数无任何返回值,这时函数的返回值类型应标 记为void。void类型称为无类型或空类型。
3.形式参数表(即形参表)
函数的参数表用于实现函数间的数据联系。
形参的说明格式:类型 形参名
(当有多个形参时,各参数说明之间用逗号分隔,如: 类型 形参名1, 类型 形参名2,…,类型 形参名n )
注意:每个形参必须同时给出形参的类型和名称。
如:int max(int a,b),作为函数首部定义是错误的。 因为形参b缺少类型说明符,即使与a类型相同,但作为形参说明也不 能省略类型符int。
形参:
1.定义函数时需考虑设置形参,形参的个数及类型根据需要 设定(也可以没有参数,称为无参函数)。
2.形参可以接收主调函数传递的实参的值。在函数中对形参 进行处理,并将处理结果返回到主调函数。
3.形参是在函数调用时分配存储空间,同时接收实参的值。 当函数执行结束后,系统将自动释放形参所分配的存储空 间。因此,形参属于函数的局部变量,只能在该函数中使 用。
4.当形参为引用类型或指针类型时,利用形参不仅可以访问 实参的值,还可以改变实参的值。 - 函数体
1.由{ }括起来的语句序列构成,是实现函数功能的主体。
2.函数的编写过程类似于主函数。在函数中可以调用其它函数。
3.在函数体中,使用return语句返回函数执行的结果。
4.语句格式: return 表达式;//其中表达式类型应与函数返回值类型一致
对于无返回值的函数,也可使用return;将控制返回到主调函数。
说明:在一个函数中允许出现多个return语句,但在函数执行期 间只能有一个语句起作用。在函数体的最后位置,一个无返回值 的return;语句可以省略。
结构体
定义: 结构是一个或多个变量的集合, 结构中的变量可能为不同的类型, 将这些变量组织在一个名字之下。
作用:由于结构将一组相关的变量看作一个存储单元, 而不是各自独立的实体,因此结构有助于组织复杂的数据。
结构类型定义的一般格式为
struct 结构类型名 {
类型名1 成员名1; 类型名2 成员名2; ……
类型名n 成员名n; };(注意:最后的分号(;)不能掉)
struct:保留字。
注意:1.数组不能彼此赋值,但同类型的结构变量可以彼此赋值。
2. 结构类型是 自定义数据类型, 不是变量
3.结构类型名不得与其它变量的名字相同
4. 结构成员名可以与其它变量的名字相同
5. 结构类型定义之后一定要跟一个分号
6. 结构变量 同其他变量一样 也具有存储类型
7.不同类型的结构变量不允许相互赋值
8.结构类型名必须包含关键字struct
9.结构变量的初始化与数组变量的初始化相同
话说这么多的知识,很多都用不起来,尤其是指针,引用,不敢用害怕错,最多也就用个传参,距离老师的要求还差的很远,最近面向对象开了个头,我对系统的编写也有也一些想法,最近再查一下资料,期末作业应该可以着手准备了。