c++知识点Word文件下载.docx

上传人:b****5 文档编号:17355677 上传时间:2022-12-01 格式:DOCX 页数:14 大小:25.45KB
下载 相关 举报
c++知识点Word文件下载.docx_第1页
第1页 / 共14页
c++知识点Word文件下载.docx_第2页
第2页 / 共14页
c++知识点Word文件下载.docx_第3页
第3页 / 共14页
c++知识点Word文件下载.docx_第4页
第4页 / 共14页
c++知识点Word文件下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

c++知识点Word文件下载.docx

《c++知识点Word文件下载.docx》由会员分享,可在线阅读,更多相关《c++知识点Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。

c++知识点Word文件下载.docx

运算符和表达式:

算数运算符:

对于除运算符,当两个运算量均为整数时为整除,商取整数,当至少有一个运算量为实数时,则为普通除。

对于求余运算,要求运算量必须为整型数据。

计算时注意溢出问题!

自增、自减运算符:

i++表示先用i的值参加运算,然后再将变量i的值加1.

++i表示先将变量i的值加1,然后再参加其他运算。

自增、自减运算符只能作用于变量,不能用于其他。

关系运算符(<

、<

=、>

、>

=、==、!

=):

关系运算符的优先级比算数运算符的优先级低,但比赋值运算符的优先级

高。

参加关系运算的两个操作数可以是任意类型的数据。

当比较结果成立时,结

果为true;

当比较结果不成立时,结果为false.

逻辑运算符(!

、&

&

、||):

非运算符(!

)的优先级比算数、关系运算符的优先级高。

与运算符(&

和或运算符(||)的优先级比算数关系运算符的优先级低,但比赋值运算符

级高。

和||运算符具有短路的特性:

对于&

,运行时先对第一个操作数求值,

如果其值为false,则不再对第二个操作数求值;

对于||,运行时先对第一个

操作数求值,如果其值为true,则不再对第二个操作数求值。

1.在判断运算量的真假时,c++规定任何非0值表示true,0值表示

false.

2.C++在计算逻辑表达式时,从左向右扫描表达式,一旦能确定表达式的值,就不继续进行计算。

位运算符:

对整型数据的运算(二进制),符号位也参与运算。

1.按位与(&

):

对应位都是1,则结果为1,否则为0.

2.按位或(|):

一个数的对应位为1,则结果为1;

若两个数的对应位都是0,结果是0.

3.按位异或(^):

对应位不同结果为1,否则为0.

4.按位取反(~):

0变1,1变0.

5.左移(<

<

将a按二进制位向左移动n位,移出的最高n位舍去,最

低位补n个0.对一个量进行左移一个二进制位操作,相当

于乘以2操作。

左移n个二进制位,相当于乘以2^n操作

程序运算时,左移运算比乘法操作速度要快。

6.右移(>

>

):

将a按二进制位向右移动n位,移出的最低n位舍去,最

高位补0或1,这取决于a是什么类型的整型量,若有符号

则高位补符号位,若无符号,则高位补0.对一个量进行右

移一个二进制位操作,相当于除以2操作。

右移n个二进

制位,相当于除以2^n操作。

逗号运算符(,):

所有运算符中级别最低的一个。

一般形式:

表达式1,表达式2,表达式3,……

逗号表达式的求解过程是从左至右依次计算各表达式,并将最后一个表达式的值作为整个逗号表达式的值。

运算符优先级口诀:

括号箭头点([],(),->

.1级)

否定取反加加负减减(!

,~,++,-,--2级)

间访地址转型分配回收测空间(*,&

,(类型),new

deleted,sizeof2级)

先乘除后加减(*,/,%3级+,-4级)

先移位后比较再看等不等(<

5级<

=6级==、!

=7级)

位与位异或位或(&

8级^9级|10级)

与或三元件(&

11级||12级?

13级)

赋值接逗点(=、+=、-=、*=、/=、%=、&

=、^=、|=、<

=14级,,15级)

结合性口诀:

从右到左2、14(级别),其他都是左到右。

数制转换:

1.其他进制转化成十进制数:

乘幂展开

2.十进制数转化成其他进制数:

除基取与倒排序(整数部分);

小数连续乘以基取整,直到最后的乘积是整数为止。

3.二进制转化成八进制(以数字0开头):

从小数点向左,每三位二进制转换成一位八进制数不足补0。

4.二进制转换成十六进制(以0x开头):

从小数点向左,每四位二进制转换成一位十六进制数,不足补0。

.

二进制数的编码表示:

1.原码:

符号-绝对值表示(最高位符号位:

1为负数,0为正数)

2.反码:

正数的反码和原码相同;

负数的反码的符号位与原码相同(仍用1表示),其余各位安位取反。

3.补码:

对于一个负数,其补码由该数反码的末位加1求得;

对于正数,其原码,反码,补码形式相同。

(补码的符号位可以作为数值参加运算,补码运算的结果仍为补码。

语句:

1.表达语句

2.空语句(只有一个分号构成的语句,空语句不执行任何操作但有语法意义)

3.复合语句(对于单个语句,必须以“;

”结束;

对于复合语句,其中的每个语句仍是以“;

”结束,而整个符复合语句的结束符是“}”)

4.流程控制语句

类型转换:

1.赋值时的类型转换:

A:

实型数据赋给整型变量:

实型数据赋给整型变量时,舍弃小数部分,将整数部分赋给整型变量,不进行四舍五入。

B:

整数赋给实型变量:

整数赋给实型变量,数值不变,有效数字位数增加。

C:

整型数据之间相互赋值:

1.)“长的”整型量

赋给“短的”整型量,将“长的”整型量“的高位去掉,截取其与“短的”整型量相同位数的低位,然后进行赋值;

2.)“短的”整型量赋给“长的”整型量a.将短的无符号整型量赋给长的整型变量,方法是在短的无符号整型量前补0,使其长度达到长的整型量的位数;

b.将短的有符号整型量赋给长的整型变量要做符号位的扩展,即在短的整型量前补符号位。

2.混合运算时的类型转换:

由低类型向高类型转换。

3.强制类型转换:

格式(<

type类型>

)表达式强制转换的是表达式的值。

简单的输入和输出方法

Cout对象和cin对象

Cout对象只能用来输出数据,cout是输出流中的一个对象,因此也称为流对象

“<

“是流插入操作符,使用”<

“可以传送多个数据给cout。

程序使用cout对象和cin对象,必须在程序开头包含如下两行:

#include<

iostream>

Usingnamespacestd;

有两种换行的方法:

一种是在cout语句后加一个流操作符endl;

另一种方法是加入‘\n’换行符。

“>

”是流提取操作符

插入操作符“<

”和提取操作符“>

”指定了数据的流动方向。

插入操作符将输入的数据传给变量,而提取操作符将变量(或常量)传给cout输出。

Cin对象在读取数据时,将暂停程序的运行,直到从键盘上输入数据并按enter键确认。

Cin对象能自动地将输入数据转换成与变量一致的数据类型。

采用cin对象可以一次读入多个变量的值。

当输入多个数时,数值之间要加空格。

采用一个cin,也可以同时为多个不同类型的变量读入数据。

Cin读入的字符串也是采用字符数组存储。

如果用一个字符数组存储字符串,要确保该字符数组足够大,能够存储字符串中的所有字符,包括“\0”。

格式化输出

1.setw操作符为每一个输出数据项指定宽度。

例如:

cout<

setw(5)<

value;

setw括号里的数值指定了将要输出的数据域宽,即输出数据在屏幕上所占的字符宽度。

Setw虽然有括号,但它并不是函数,而是用于设置输出项宽度的操作符,使用时要包含iomanip头文件。

Setw用于设置与它相邻的下一个输出项的域宽,一旦该项输出完毕,将把后面的域宽恢复到默认值。

如果输出数据宽度大于setw指定的域宽,那么cout将输出完整的值,也就是说cout不会截断数据。

浮点数的域宽包括小数点所占的位置;

数值的输出默认为右对齐,即数据在右边,空格填充在数据的左边;

字符串中的空格也属于有效字符,并且占域宽。

2.setprecision操作符指定浮点数的输出精度,即输出数的有效位数。

如果输出数的精度比操作符setprecision指定的要小,则该指定失效。

精度的设置在它被重新设置之前一直有效。

Cout的函数成员

Cout对象调用函数成员width,设定输出项的域宽:

cout.width(5).和setw效果等同。

Cout.precision

(2)设定浮点数的精度。

这种设定将会保持到重新设定或程序的结束。

Cout.setf()设定状态标志,在setf中采用“|”连接多个状态标志。

Unsetf清楚已经设定的状态标志。

指定输入域宽:

Cin的输入域宽可以使用操作符setw指定,也可以使用cin.width函数成员指定。

(1.)域宽只对与其相邻的下一个输入有效。

(2.)当Cin、遇到空字符时,它将停止读入,空字符包括回车,空格,tab键。

(3.)当cin读取一定的字符以后,多余的字符将留在缓冲区中。

读取一行:

Cin.getline(数组名,字符个数(含空字符))

采用cin.getline读取字符串时,将读取换行符前面的所有字符(包含换行符);

但向数组中存储字符时,并不存储换行符,而是采用‘\0‘填写在最后一个有效字符的后面,从而构成一个字符串。

读取一个字符:

Cin能够自动识别当前读入的数据类型;

cin不读取空格,跳格和回车键。

Cin.get()读取输入中的第一个字符,包括空格,tab键和enter键,>

只读取输入中的第一个非空白字符。

Cin.ignore()括号里有参数(n,c)其中n是一个整数,表示跳过的字符数,c表示遇到字符c时停止跳跃;

括号里没有参数,表示跳过键盘缓冲区中的第一个字符。

Typedef声明:

Typedef就是用于将一个标识符声明成某个数据类型的别名,然后将这个标识符当作数据类型使用。

形式:

typedef已有类型名新类型名表;

其中,新类型名表中可以有多个标识符,他们之间可以用逗号隔开。

枚举:

格式:

enum枚举类型名{枚举常量列表};

对于枚举元素按常量处理,不能对其赋值,枚举常量的值可以在定义时被显式指定,后一个总比前一个的值加1.枚举值可以进行关系运算。

整数值不能直接赋给枚举变量,如需要将整数赋值给枚举变量,应进行强制类型转换。

函数:

声明函数时,形参表只要包含完整的类型信息即可,形参名可以省略。

函数参数的传递方式:

C++支持两种参数传递方式:

值传递和引用传递。

值传递是指当发生函数调用时,给形参分配内存空间,并用实参来初始化形参(直接将实参的值传递给形参)。

这一过程是值的单向传递过程,一旦形参获得了值便与实参脱离关系,此后无论形参怎么改变,都不会影响实参。

引用传递是一种特殊类型的变量,可以被认为是另一个变量的别名,通过引用名与通过被引用的变量名访问变量的效果是一样的。

声明一个引用时,必须同时对它进行初始化,使它指向一个已存在的对象,一旦一个引用被初始化后,就不能改为指向其他对象。

引用可以作为形参,成为引用传递。

内联函数

在编译时将函数体潜入在每个调用处。

内联函数应该是比较简单的函数,结构简单,语句少。

形式:

inline类型说明符函数名(含类型说明的形参表)

{语句序列}

默认参数:

C++允许定义具有默认实参的函数。

这样在函数调用时,实参与形参的个数不同,默认参数也称为缺省参数。

如果在函数调用中省略了函数实参,将把函数的缺省值赋给函数形参。

缺省值的设定通常是在函数原型中给出。

如果在程序中没有给出函数原型,那么缺省值可以在定义函数时给出。

函数的缺省值应该在函数名出现最早的地方给出。

注意:

在函数调用中,第一个参数用缺省值,而第二个参数用指定值是错误的,如果一个参数具有缺省值,那么它右边的参数都要有缺省值。

形参不一定都要有缺省值。

参数的缺省值必须是常量,不能是变量。

函数的返回值:

1.)一个函数可以有多个参数,但一个函数最多只能返回一个值,如果要从一个函数返回多个值,必须通过“打包”的方式,将这些值当作一个整体来处理。

2.)如果一个函数的返回值不是void,那么该函数必须包含return语句。

函数递归调用:

对同一个函数的多次不同调用中,编译器会为函数的形参和局部变量分配不同的空间,他们互不影响。

函数重载:

两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定用哪个函数,这就是函数重载。

重载函数的形参必须不同:

个数不同或类型不同。

编译器不以形参名和返回值来区分函数。

不要将不同功能的函数定义为重载函数。

局部变量和全局变量:

内存存储区的分布:

1.)代码区:

存放程序的可执行代码。

2.)全局数据区:

存储静态变量和一般的全局变量,自动初始化为0。

3.)栈区(一种先进后出的结构):

存放局部变量,包括函数的形参、函数内定义的一般变量。

分配栈区时,不处理原内存中的值。

如果对变量不初始化,那么变量的初值不确定。

4.)自由存储的堆区:

存放与指针有关的动态数据,分配存储区时,也不清零。

局部变量:

局部变量包括函数的形参、函数内定义的变量、复合语句内定义的变量。

由于局部变量具有一定的范围性,所以不同的函数可以定义同名的变量,但这些变量之间不会相互影响。

全局变量:

全局变量存放在全局数据区,如果定义时没有给出初值,则自动初始化为0.全局变量可定义在函数外的任何一个位置,其有效范围是从变量定义处开始到文件结束,都可以访问。

如果程序的某个函数修改了全局变量,则其他函数都可见修改后的结果。

如果一个函数内的局部变量和全局变量同名,那么对于函数来说只有局部变量是可见的,这称为全局变量的隐藏。

要引用同名的被隐藏的全局变量,必须加上“:

局部变量与栈:

当函数调用时,系统借助栈实现函数调用和局部变量的空间分配。

变量的存储类别:

auto(自动存储变量);

register(寄存器变量)采用register修饰的变量将尽可能的存储在寄存器中,以提高程序的运行速度;

register只能修饰局部的int型或char型变量,而不能修饰其他类型的变量;

static(静态变量)初始化仅进行一次;

extern扩展全局变量的作用域。

将全局变量的作用域扩展到定义之前:

在引用之前用关键字extern对该变量进行引用性说明。

此声明不同于全局变量的定义,采用extern声明变量,应确保变量已经在其他地方定义过。

用extern声明变量时,类型名可以省略。

将全局变量的作用域扩展到其他文件:

静态全局变量不能采用extern进行作用域扩展。

类:

定义类的语法形式:

例子:

Class类名称classclock

{{

Public:

public:

外部接口voidsettime(intnewH,intnewM,intnewS);

Protected:

private:

保护型成员inthour,minute,second;

Private:

public:

私有成员voidshowtime();

};

//注意分号。

};

在类中可以只声明函数的原型,函数的实现(即函数体)可以在类外定义

类的成员包括数据成员和函数成员。

对类成员访问权限的控制属性有:

公有属性(public),私有属性(private),保护属性(protected)。

公有类型成员定义了类的外部接口,在类外只能访问类的公有成员;

私有成员只能被本类的成员函数访问,来自类外部的任何访问都是非法的,如果私有成员紧接着类名称,则关键字private可以省略。

一般情况下,一个类的数据成员都应该声明为私有成员。

在类的定义中,具有不同访问属性的成员,可以按任意顺序出现。

修饰访问属性的关键字也可以多次出现,但是一个成员只能有一种访问属性。

在书写时通常习惯将公有类型放在最前面。

声明对象:

类名对象名;

对象所占据的内存空间只是用于存放数据成员,函数成员不在每一个对象中存储副本,每个函数的代码在内存只能够只占据一份空间

访问数据成员:

对象名.数据成员名

调用函数成员:

对象名.函数成员名(参数表)

函数的原型声明要写在类体中,具体函数的实现是写在类定义之外的,

函数实现具体形式:

返回值类型类名:

函数成员名(参数表)

{函数体}

成员函数调用中的目的对象:

调用一个成员函数需要使用“.”操作符之处调用所针对的对象(myclock.showtime():

myclock就是这一调用过程中的目的对象。

)。

在成员函数中可以不使用“.”而直接引用目的对象中的数据成员。

在成员函数中引用其他对象的属性和调用其他对象的方法时,都需要使用“.”注意:

在类成员函数中,既可以访问目的对象的私有成员,又可以访问当前类的其他对象的私有成员。

带默认形参值的成员函数:

类成员函数的默认值一定要写在类定义中,而不能写在类定义之外的函数实现中。

内联成员函数的声明:

隐式声明和显式声明

隐式声明:

将函数体直接放在类体内。

显式声明:

用inline修饰,在函数实现时。

构造函数和析构函数:

构造函数的作用就是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定状态,构造函数也是类的一个成员函数,构造函数的函名与类名相同,而且没有返回值。

构造函数通常被声明为公有函数。

只要类中有构造函数,编译器就会在建立新对象的地方自动插入对构造函数调用的代码。

复制构造函数:

复制构造函数的特性:

其形参是本类的对象的引用。

其作用是使用一个已经存在的对象(由复制构造函数的参数指定)。

去初始化同类的一个新对象。

声明和实现复制构造函数的一般方法:

Class类名

{

Public:

类名(形参表);

类名(类名&

对象名)

……

类名:

复制构造函数被调用的情况:

1.>

当用类的对象去初始化该类的另一个对象时。

2.>

如果函数的形参是类的对象,调用函数时,进行形参和实参的结合时。

3.>

如果函数的返回值是类的对象,函数执行完成返回调用者时。

析构函数:

析构函数是对象在生存期即将结束的时刻被自动调用的,析构函数不接受任何参数。

~类名(){}没有返回值。

类的组合:

组合类构造函数定义的形式:

类名(形参表):

内嵌对象1(形参表),内嵌对象2(形参表)……{类的初始化}

构造函数的调用:

(1.)调用内嵌对象的构造函数,调用顺序按照内嵌对象在组合类的定义中出现的次序,

动态内存分布:

运算符new的功能是动态分配内存,或是动态创建堆对象。

语法形式:

new数据类型(初始化参数列表);

①int*pointpoint=newint[2]:

动态分配了用于存放int数据类型的内存空间,并把2的值存入该空间。

②int*point=newint:

对于基本数据类型,如果不希望在分配内存后设定初值,可以把括号省去。

如果保留括号,但括号里不写任何值,则表示用零去初始化该对象。

③int*point=newint[7]:

申请一个能存放7个数据的数组。

运算符delete用来删除new建立的对象,释放指针所指向的内存空间。

格式:

delete指针名;

如果被删除的是对象,该对象的析构函数将被调用,对于用new建立的对象,只能用delete进行一次删除操作。

用new申请的空间必须用delete加以释放。

函数模板

Template<

typenameT>

例:

template<

类型名函数名(参数表)Tabs(Ti)

{函数体的定义}{returni>

0?

i:

-i}

函数模板不会进行自动类型转换。

作用域:

1.函数原型作用域:

在函数原型声明时形式参数的作用范围就是函数原型的作用范围。

在函数原型的形参类表中起作用的只是形参的数据类型,标识符并不起作用。

2.局部作用域:

函数形参列表中形参的作用域,从形参列表中的声明处开始,到整个函数体结束时为止。

函数体内声明的变量,其作用域从声明出开始,一直到声明所在的块的大括号为止。

3.类的作用域:

对类的成员m的访问方式:

(1.)如果在X的函数成员函数中没有声明同名的局部作用域标识符,那么该函数内可以直接访问成员m.

(2.)通过表达式X.m或者X:

:

m。

X:

m是对类的静态成员的访问。

(3.)通过ptr->

m这样的表达式,其中ptr是指向类的对象的指针。

4.命名空间的作用域:

语法形式:

namespace命名空间名

{命名空间内的各种声明(函数声明,类声明……)}

引用其他命名空间的标识符:

命名空间名:

标识符名

如果需要引用类名或函数名,如下:

someNs(命名空间名):

someClass(类名)Obj1(对象)

Using语句:

Using命名空间名:

标识符名;

Usingnamespace命名空间;

命名空间也允许嵌套。

匿名命名空间:

namespace{匿名命名空间内的各种声明}

具有局部作用域的变量把具有命名空间作用域的变量隐藏了,具有命名空间作用域的变量变得不可见。

具有命名空间作用域的变量也称全局变量。

5.作用域可见性的一般规则:

(1.)标识符要声明在前,引用在后。

(2.)在同一作用域中,不能声明同名的标识符。

(3.)在没有互相包含关系的不同的作用域中声明同名标识符,互不影响。

(4.)如果在两个或者多个具有包含关系的作用域中声明了同名标识符,外层标识符内层不可见。

对象的生存期:

1.静态生存期:

如果对象的生存期与程序的运行期相同,则称它具有静态生存期。

在命名空间作用域中声明的对象都具有静态生存期。

如果在函数内部的局部作用域中声明具有静态生存期的对象,则要使用关键字static。

在定义静态变量的同时可以为它赋初值。

类的数据成员也可以用static修饰。

定义时未指定初值的基本类型静态生存变量,会被赋予0初始化。

2.动态生存期:

局部生存期对象诞生于声明点,结束于声明所在的块完

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 艺术创意

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1