C++ 课本知识总结.docx

上传人:b****7 文档编号:8964337 上传时间:2023-02-02 格式:DOCX 页数:59 大小:52.71KB
下载 相关 举报
C++ 课本知识总结.docx_第1页
第1页 / 共59页
C++ 课本知识总结.docx_第2页
第2页 / 共59页
C++ 课本知识总结.docx_第3页
第3页 / 共59页
C++ 课本知识总结.docx_第4页
第4页 / 共59页
C++ 课本知识总结.docx_第5页
第5页 / 共59页
点击查看更多>>
下载资源
资源描述

C++ 课本知识总结.docx

《C++ 课本知识总结.docx》由会员分享,可在线阅读,更多相关《C++ 课本知识总结.docx(59页珍藏版)》请在冰豆网上搜索。

C++ 课本知识总结.docx

C++课本知识总结

第一章面向对象程序设计概述

1、面向对象程序设计方法中的对象,是构成软件系统的一个基本单位,是描述客观事物的一个实例。

2、对象由一组属性(Attribute)和一组行为(Action)构成,对象只有在具有属性和行为的情况下才具有意义;

属性是用来描述对象静态特征的数据项,行为是用来描述对象动态特征的一系列操作

3、类是具有相同属性和行为的一组对象的集合。

类给出了属于该类的全部对象的抽象定义,而对象则是符合该类特征的一个实体。

因此,对象又称作类的一个实例

4、消息(Message)是描述事什发生的信息,是对象之间发出的行为请求。

事件(Event)一般由多个消息组成

消息的三个性质:

同一个对象可以接受不同形式的多个消息,产生的消息各不相同;

相同形式的消息可以发送给不同的对象,产生的响应可以各不相同;

一个对象可以立即响应发送给它的消息,也可以暂时不予响应消息。

5、抽象性:

抽象是指分析和提取事物中与当前目标有关的本质特征、忽略非本质特征,找出事物的共同特性将具有共性的事物分为一类。

6、封装性:

即将对象的属性和行为封装在对象的内部,形成一个独立的单位,并尽可能隐蔽对象的内部细节

7、继承性:

派生类对象自动地拥有父类的全部属性与行为。

8、多态性:

在父类中定义的属性或行为,被派生类继承之后,可以具有不同的数据类型或表现出不同的行为特性

9、面向对象分析是指在深入、全面理解问题本质需求的基础上,发现对象与类,确定属性、确定对象模式、确定对象类的关联关系、确定服务等要素。

10、面向对象设计基本准则包括:

模块化;抽象;信息隐蔽;低偶合度与高内聚性;可扩充性;可重用性。

11、面向对象编程在面向对象分析和面向对象设计的基础上,使用面向对象程序设计语言实际进行程序代码编写,并最终实现一个可供实际使用的软件系统;基础和核心的工作是类的具体设计和实现等;

12、程序的开发通常要经过编辑、编译、连接、运行调试这几个步骤模块化。

13、面向对象的软件测试指在符合面向对象的概念与原则的基础上进行的测试,以对象的类作为基本测试单位,发现和排除程序错误,提高测试效率

第2章C++程序设计基础

1、C++语言的特点:

1)全面兼容C语言,这是C++广泛流行的基础,保持了C语言的简洁、灵活、高效和接近汇编语言等特点;

对C语言的类型系统进行了革新和扩充,因而C++比C更安全;C++的编译系统也比C更严格;

2)全面支持面向对象程序设计方法:

C++支持面向过程的程序设计;C++是混合型大型程序设计语言。

2、C++语言字符集的组成:

单字符、关键字、标识符、运算符

3、C++程序的组成:

C++程序由一个或多个源代码文件构成。

C++的源代码文件分为两类:

头文件和源程序文件;

一般将变量(对象)、类型及类的定义、函数的声明等放在头文件(扩展名为.h);而将使用这些变量或函数的程序放在另一个文件中,成为C++源程序(扩展名.cpp);

4、C++源程序可分为:

编译预处理、程序主体和注释三个部分。

5、常量是指在程序的运行过程中,其值不能被改变的量。

常量包括:

整型常量:

5,8…实型常量:

2.18,5.18…字符常量:

a,b…

字符串常量:

“china”,…布尔型常量:

false,true

6、在程序的执行过程中其值可以变化的量称为变量,变量在程序设计中需要通过标识符命名。

变量可以在程序的任何地方定义;必须先定义后使用;

变量的定义形式:

数据类型变量名1,变量名2,…变量名n;

变量的访问方式包括:

地址访问、指针访问、引用访问。

7、指针(pointer)是用于存放其他数据地址的变量。

这些数据可以是基本类型的数据、也可以是数组、指针、类等用户自定义数据类型。

指针变量的定义格式:

类型*指针变量名;

指针变量的使用格式:

指针变量名=&变量名;

8、引用是C++独有的类型,引用实际上是变量或对象的别名,是一种访问变量的方法。

使用引用时需要对变量进行初始化,并将引用绑定到相应的变量名上;

对引用的修改就是对变量本身值的修改。

引用的声明格式:

类型&引用名=变量名;

引用适用于基本数据类型(变量),也适用于包括类对象在内的自定义数据类型。

9、符号常量:

经过命名以后的常量称为符号常量

符号常量必须先定义后使用;变量的定义形式:

const数据类型常量名=常量值;

或数据类型const常量名=常量值;

10、运算符和表达式是C++用于处理数据的工具

表达式即程序中用于计算的算式,是指通过各种运算符(包括括号)将常量、变量及函数等有关操作数连接起来的并符合C++语法规定的算式。

这种算式可以很简单,也可以很复杂。

C++的运算符由以下类型运算符组成:

(1)算术运算符

(2)关系运算符(3)逻辑运算符(4)位运算符

(5)赋值运算符(6)条件运算符(7)逗号运算符(8)指针运算符(9)求字节数运算符

(10)强制类型转换运算符(11)分量运算符(12)下标运算符(13)其他运算符

算术运算符包括基本算术运算符和自增自减运算符。

 逗号运算与逗号表达式:

先求解表达式1,再求解表达式2,最终结果为表达式2的值。

形式如下:

表达式1,表达式2

逗号运算符可以连续使用,其扩展形式为:

表达式1,表达式2,…表达式n

11、条件运算符是C++中惟一的三元运算符,它可以实现简单的选择功能。

条件表达式的使用形式如下:

表达式1?

表达式2:

表达式3

先求解表达式1,若表达式1的值为true,则以表达式2的值为最终结果,若表达式1的值为false,则以表达式3的值为最终结果。

12、sizeof运算符用于计算有关类型的对象在内存中所占的字节数。

使用格式如下:

sizeof(类型名或表达式)

13、位运算:

即二进制位运算符,具有位运算能力是C++优点的一个体现。

C++提供了六个位运算符,可以对整数进行各种位运算操作。

&按位与运算符;|按位或运算符;^按位异或运算符;~按位取反运算符

<<左移运算符;>>右移运算符。

14、混合运算时数据类型的转换

自动转换。

基本原则是:

将低类型(简单类型)数据转换为高类型(复杂类型)数据。

各种类型由高到低顺序如下:

Double、float、unsignedlong、long、unsigned、int、short、char

强制转换:

强制类型转换有两种应用形式

格式分别如下:

(1)类型说明符(表达式);

(2)(类型说明符)表达式;

15、输入/输出(I/O)是每一个程序必须具备的基本功能;

从计算机向标准外部设备(如屏幕)输出数据称为输出;

从标准外部设备(如键盘)向计算机输入数据称为输入。

16、在C++中,将数据从一个对象到另一个对象的流动抽象为“流”;

从流中获取数据的操作称为提取操作;向流中添加数据的操作称为插入操作;

cin和cout是系统预定义的流类对象;

cin用来处理由标准设备产生的输入,如键盘输入;cout用来处理向标准设备的输出,如向屏幕输出。

17、插入运算符“<<”是C++系统预定义的运算符,用于输出:

cout<<表达式1<<表达式2<<…<<表达式n;

提取运算符“>>”是C++系统预定义的运算符,用于实现输入:

cin>>表达式1>>表达式2>>…>>表达式n;

18、简单格式控制:

常用I/0流类库操作符功能:

操作符

含义

输入/输出

Dec

用十进制表示数值数据

用于输入/输出

Endl

插入换行符,并刷新流

用于输出

Hex

用十六进制表示数值数据

用于输入/输出

setprecision(int)

设置浮点数的位数

用于输出

setw(int)

设置域宽

用于输入/输出

19、C++有三种基本的程序控制结构:

顺序结构、选择结构、循环结构。

顺序结构是C++语言中最简单的程序控制结构;程序的执行顺序和语句顺序是完全一致。

选择结构又称为分支结构;许多程序都具有的一种结构形式;

选择结构是通过if语句和switch语句实现的,即根据判断条件执行不同的程序段或程序模块。

20、C++具有三种循环结构控制语句:

While、do-while、for

21、continue语句的作用是终止本次循环,执行下一次循环;

break语句在循环和分支中的作用是从循环或分支中退出,提前结束循环或分支;语句不能用于循环语句和switch语句之外的任何其他语句之中。

22、自定义数据类包括:

结构类型、联合类型、枚举类型、数组类型、类类型。

23、结构体的声明格式如下:

struct结构体名

{

数据类型1成员名1;

数据类型2成员名2;

数据类型n成员名n;

};

声明了结构体类型以后,可以进行结构体变量的定义,定义格式如下:

结构体名结构体变量名;

例如:

studentstudent1,student2;

结构体变量使用:

结构体名.成员名

24、联合体的声明格式如下:

union联合体名

{

数据类型1成员名1;

数据类型2成员名2;

数据类型n成员名n;

};

声明了联合体类型以后,可以进行联合体变量的定义,定义格式如下:

联合体名联合体变量名

联合体变量的使用形式:

联合体名.成员名

25、所谓枚举是指变量只有有限种可能的取值情况,即变量的值可以一一列举。

枚举类型变量的声明格式如下:

enum枚举类型名{变量列表}

其中枚举类型名是程序员自定义的标识符,符合标识符命名规则即可,如:

enumcolor{red,yellow,blue,white,black};

26、typedef是C++的类型定义的关键字。

typedef可以为系统预定义及用户已经定义的数据类型取别名,即程序中除可以使用各种基本数据类型名和自定义的数据类型名以外,还可以为任何已有的数据类型另外命名。

别名也可以当正式数据类型使用

注意:

typedef只能对已经存在的数据类型(包括预定义的基本数据类型和用户自定义的数据类型)增加一个或多个别名;不能创造新的数据类型。

27、类型定义的使用格式如下:

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

通过typedef可以为一个既有数据类型声明多个别名。

例如:

typedefintnatural,integer;integeri,j;naturaln;

第3章函数

1、C++程序一般包含一个或多个函数;有且仅有一个main()主函数,它是C++程序执行的入口点;

主函数可以调用其他函数;函数之间还可以互相调用;

调用其他函数的函数称为主调函数,被调用的函数称为被调函数。

2、C++函数的定义格式如下:

返回值类型函数名(形式参数表){函数语句序列}

函数调用的格式如下:

函数名(实参表);

实参表有多个实参时,各实参之间同样以逗号分隔。

实参与被调用函数的形参表必须严格对应,即参数数量、类型和参数位置值必须一一对应。

3、函数原型声明的格式如下:

返回值类型函数名(参数表);

4、函数的参数传递是指函数调用过程中形参与实参结合的过程

函数调用未发生时,编译系统并没有给函数的形参分配实际内存空间

发生函数的实际调用时,才给函数的各形参分配存储空间,同时将实参的值依次传递给各形参

函数调用结束以后,系统将释放形参所占用的存储单元

5、按参数传递情况,函数调用可以分为:

传值调用、传地址调用、引用调用

传值调用是指在发生函数调用时,先计算实参表达式的值,并直接将各实参的值依次赋值给各形参。

单向传递,即由实参到形参;形参的值不能影响实参的值。

传地址调用指将实参的地址传递给形参。

实参必须用地址值,形参用指针变量。

通过形参指针可以对实参进行间接读写。

引用可以作为函数的返回值类型和形参,使用引用作为函数的形参时,主调函数的实参需要使用变量名。

函数调用时,将实参值传递给形参,实际上是被调用函数使用了实参的别名,因而形参的改变本质上就是对实参的改变。

6、函数的嵌套调用是指主调函数调用了被调函数,而该被调函数又调用了其他被调函数,这样就形成了函数的嵌套调用。

7、函数的递归调用是指一个函数可以直接或间接的调用该函数自身。

函数的嵌套调用是指函数A调用了函数B,而函数B又调用了函数C,这样就形成了函数的嵌套调用;

C++对函数嵌套调用的层次没有限制;可以进行多层次的嵌套调用。

C++语言允许函数自身调用自身,即递归调用。

递归调用包括:

直接递归调用:

函数直接调用自身;

间接递归调用:

主调函数调用了其他被调函数,但该被调函数又调用了原主调函数,从而形成了函数递归调用。

8、C++继承了C语言函数的特性,同时在函数的使用性能上也有新的改进,包括:

允许使用内联函数;带缺省参数的函数;支持函数重载;

9、内联函数:

对于一些功能比较简单、代码少及使用频率较高的函数,C++引入了内联函数的概念.

内联函数的定义由关键字inline引导,其定义格式如下:

inline返回值类型函数名(形式参数表){函数语句序列}

使用内联函数注意:

内联函数必须在函数第一次出现时由inline指定;

内联函数代码不宜太大,原则上适宜于1~5行代码的小函数;

不能含有复杂的分支或循环等语句;递归调用的函数不能定义为内联函数。

10、函数重载,即具有相同或相似功能的函数使用同一函数名,但这些同名函数的参数类型、参数数量和返回值类型不尽相同。

编译系统将根据函数参数类型和参数数量判断使用哪一个函数。

支持函数重载是C++多态性的体现之一

11、带默认参数的函数指在定义函数时给函数中的部分参数以默认值。

当调用语句给出函数的参数值时,就按给定值调用函数;

当函数调用语句没有给出函数的参数值时,则按定义时的默认值调用函数;

带默认参数的函数又称为带缺省参数的函数。

定义带默认参数的函数时应注意:

默认参数必须出现在右边,非默认参数在左边。

默认参数应在函数第一次出现时给定默认值。

12、C++的系统函数:

常用数学函数sin(),cos(),tan(),abs()sqrt(),log10(),rand()等都可以由系统提供;

C++系统函数按类别分属于不同的头文件中,用户只需使用#include指令嵌入相应的头文件即可使用;

13、作用域是指包括变量在内的标识符的有效性范围,即标识符的作用空间。

变量不仅具有作用域,而且在内存中还有不同的存储类型

C++的作用域包括:

函数原型作用域;块作用域(局部作用域);函数作用域;

类作用域(在类与对象中介绍);文件作用域。

(1)函数原型作用域位运算:

函数原型声明中形参的作用范围就是函数原型作用域;

函数原型声明中形参变量的作用域起于函数原型声明的左括号,结束于函数原型声明的右括号;

函数原型作用域是C++程序中最小的作用域。

例如,以下函数原型声明:

doublefun1(doublex1,doublex2);其中标识符x1,x2的作用域仅在函数fun1原型的左、右括号之间

(2)块作用域:

标识符在一个函数的语句块内定义时,则它具有块作用域。

语句块指程序中一对花括号内的语句部分。

块作用域是从块内的定义处开始,直到该块结束(即所在复合语句的右花括号)为止。

(3)函数作用域:

函数中使用的语句标号具有函数作用域。

仅在本函数中有效。

(4)文件作用域:

C++程序中,在函数之外声明的标识符具有文件作用域。

具有文件作用域的标识符,在整个程序文件中均有效,但在其他文件中无效。

具有文件作用域的标识符,其作用域开始于声明处,结束于该文件的结束处。

14、变量的存储类型指变量在内存中的存储方法

存储类型

特性

auto

采用堆栈方式分配内存空间,属于暂时性存储,其存储空间可以被若干变量多次覆盖使用

Register

存放在通用寄存器中

extern

在所有函数和程序段中都可以引用

static

在内存中是以固定地址存放的变量,在整个程序运行期间都有效

15、生存期:

静态生存期、局部生存期、动态生存期

16、从变量的作用域看,可以将变量分为:

全局变量、局部变量。

在C++程序文件中,当一个变量定义在所有函数之外,则该变量称为全局变量。

全局变量存放在内存的全局数据区,具有全局作用域。

全局变量方便了数据的共享,但破坏了数据的隐蔽性。

应尽量少定义全局变量。

局部变量指在函数内或语句块内定义的变量,它仅具有函数作用域或语句快作用域。

恰当使用局部变量可实现函数之间的数据隐蔽。

局部变量可以用auto进行修饰。

static限定的变量称为静态局部变量。

17、头文件:

C++程序中,既可以将程序源代码包含在一个程序文件中,也可以将不同的功能部分放在不同的文件中。

一般将声明部分或说明部分(包括类的声明)形成为.h文件,将函数的定义、类的实现及类的使用等形成为.cpp文件。

头文件是C++源程序文件的重要组成部分。

一般可以将函数的声明、类型声明、类的说明及全局变量的声明(包括宏定义等)有关部分编辑为头文件,即.h文件。

C++标准库共提供了32个头文件。

18、多文件结构:

一般将函数的实现、类的实现及main()函数等编辑为.cpp文件,通常称为实现文件。

对于大型的应用程序,一个工程文件往往包含多个头文件(.h)和源文件(.cpp)。

对于采用多文件结构实现的工程,应使用#include编译预处理指令将其他文件包含到当前工程文件之中。

19、编译预处理:

C++编译过程分分编译预处理和正式编译。

系统源程序进行编译前,需要对源程序文本进行编译预处理。

预处理指令可以出现在程序中任何需要的地方。

预处理指令均以#引导,每条预处理指令各占一行,没有分号结束符。

文件包含指令和条件编译指令是常用的编译预处理指令。

20、宏定义:

C++中可以继续使用C语言的宏定义指令#define。

以下语句定义了一个符号常量:

#definepi3.14159;//pi和3.14159可以等效使用

#undef的功能是删除由#define指令所定义的宏。

21、文件包含指令即#include指令:

文件包含命令有以下两种使用格式:

#include<文件名>、#include“文件名”。

22、所谓条件编译是指程序的代码不一定全部参与编译,而是有些程序段必须在满足一定条件下才参与编译。

第4章类与对象

1、类是对具有相同属性(数据)和行为(操作)的一组对象的抽象。

面向对象程序设计的核心任务是类的确定和对象的创建,而不是将各个具体的对象逐一进行描述。

忽略各具体对象的非本质特征,抽象出本质特征与共性,然后形成类的概念,对象是类的实例。

从语法分析,类也是一种数据类型,即用户自定义的数据类型,而一个一个具体的对象可以视为属于这一数据类型的一个变量。

2、类的定义:

类是对具有相同属性和行为的一组对象的抽象与统一描述;

类的定义包括行为和属性两个部分:

属性以数据表示,行为通过函数实现。

类定义和使用时应注意:

类的定义中不能对数据成员进行初始化;

公有部分是类对外的接口,一般应先说明公有部分;

类的任何成员都必须指定访问属性,一般将数据成员定义为私有成员或保护成员,将成员函数定义为公有成员;

类中的数据成员可以是C++语法规定的任意数据类型,但不能用存储类型auto、register或extern进行修饰。

类的成员可以是其他类的对象,但不能以类自身的对象作为本类的成员,而类自身的指针和引用可以作为类的成员。

类定义必须以分号“;”结束。

在C语言中,结构体只有数据成员,而C++的结构体不仅有数据成员,而且有成员函数及访问权限控制。

类与结构体的区别:

没有明确指定类成员的访问权限时,C++结构体的成员是公有的,而类的成员是私有的。

类成员访问控制表:

访问控制

含义

属性

public

公有成员

类的外部接口

protected

保护成员

仅允许本类成员函数及派生类成员函数访问

private

私有成员

仅允许本类成员函数访问

3、类的成员函数是实现对封装的数据进行操作的惟一途径,是现实类的行为属性的成员。

一般将成员函数声明为函数原型,在类外具体实现成员函数。

如果成员函数已经在类中定义,则无须在类外实现。

类中定义的成员函数自动成为内联函数。

成员函数的定义:

返回值类型类名:

成员函数名(参数表){函数体}

4、内联成员函数:

在类中实现的成员函数自动成为内联函数;

内联成员函数可以减少函数调用开销,提高程序的执行效率;内联成员函数增加了程序代码的长度;

一般将调用频繁且代码少的成员函数定义为内联成员函数;

若内联成员函数在类外实现,需要以inline限定。

5、对象:

类描述了一类问题的共同属性和行为,对象是类的实例或实体。

类与对象的关系,如同C++基本数据类型和该类型的变量之间的关系

对象的定义格式如下:

类名对象名1,对象名2,…,对象名n;

定义对象应注意:

必须在定义了类之后,才可以定义类的对象;类定义仅提供该类的类型定义。

仅仅定义了类,系统并不会分配存储空间,只有定义了对象后,编译系统才会在内存中预留空间。

声明了类及其对象以后,就可以访问对象的公有成员(包括数据成员和成员函数)。

对象成员的访问包括:

圆点访问形式:

对象名.公有成员;

指针访问形式:

形式一:

对象指针变量名->公有成员

形式二:

(*对象指针变量名).公有成员

6、New运算符用于动态内存分配;

New运算符使用形式:

(1)指针变量=new数据类型;

(2)指针变量=new数据类型(初始值);

(3)指针变量=new数据类型[元素个数];

指针所指向的数据类型应与new运算符后的数据类型相同,若申请成功则返回分配单元的首地址给指针变量,否则返回空指针值(即0)给指针变量。

例如:

int*p1;

double*p2;

p1=newint(12);

p2=newdouble[100];

分别表示动态分配了用于存放整型数据的内存空间,将初值12写入该内存空间,并将首地址值返回指针p1;

动态分配了具有100个双精度实型数组元素的数组,同时将各存储区的首地址指针返回给指针变量p2;

7、构造函数与析构函数:

对象是类的实例,在创建了对象以后,编译系统将给对象分配存储空间。

不同对象的区别主要表现在两个方面:

对象名:

即对象的标识符(外在区别);对象属性:

即数据成员的值,(内在区别)

对象在定义的时需要初始化。

对象生命期结束时要进行清理工作。

C++中对象的创建与初始化、对象生命期结束时的清理工作,分别由构造函数和析构函数完成。

构造函数的功能是:

在定义对象时由编译系统自动调用来创建对象并初始化对象。

构造函数的函数名与类名相同。

其定义格式如下:

类名:

类名(参数表){函数语句}

构造函数的特殊性质:

构造函数的函数名与类名相同;

构造函数可以有任意类型的参数,但没有函数返回值类型;

构造函数一般被定义为公有成员;构造函数在创建对象时由编译系统自动调用;

构造函数只能一次性地影响对象的数据成员初值。

如果类中没有定义构造函数,系统将自动生成一个默认形式的构造函数,用于创建对象,默认构造函数形式:

类名:

类名(){}

使用构造函数时应

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

当前位置:首页 > 解决方案 > 学习计划

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

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