C++概念与简答第一章绪论1、请简述什么是面向对象的语言(1)出发点:更直接地描述客观世界中存在的事物(对象)以及它们之间的关系。(2)特点:①是高级语言。②将客观事物看作具有属性和行为的对象。③通过抽象找出同一类对象的共同属性和行为,形成类。④通过类的继承与多态实现代码重用。(3)优点:使程序能够比较直接地反映问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。2、面向对象的方法(1)将数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离的整体——对象。(2)对同类型对象抽象出其共性,形成类。(3)类通过一个简单的外部接口,与外界发生关系。(4)对象与对象之间通过消息进行通信。3、封装:把对象的属性和服务结合成一个独立的系统单元4、继承对于软件复用有着重要意义,是面向对象技术能够提高软件开发效率的重要原因。定义:特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。5、多态性:同样一个接口,不同的数据有不同的状态6、面向对象的软件工程(考察缩写匹配)面向对象的分析(OOA)意义:能够很好地映射客观事物。面向对象的设计(OOD)面向对象的编程(OOP)面向对象的测试(OOT)以对象的类作为基本测试单位面向对象的软件维护(OOSM)7、程序的开发过程(1)编辑:将源程序输入到计算机中,生成后缀为cpp的磁盘文件。(2)编译:将程序的源代码转换为机器语言代码。(3)连接:将多个源程序文件以及库中的某些文件连在一起,生成后缀为exe的可执行文件。(4)运行调试第二章C++简单程序设计1、语言的最基本单位是字符:字符──词──语句──函数──程序。2、字符集是构成C++语言的基本元素3、词法记号是最小的词法单位4、类型名的字节长度类型名长度(字节)bool1char1signedchar1unsignedchar1short(signedshort)2unsignedshort2int(signedint)4unsignedint4long(signedlong)4unsignedlong4float4double8longdouble85、所谓常量是指在程序运行的整个过程中其值始终不可改变的量,也就是直接使用符号(文字)表示的值。分为一般常量和符号常量两种6、实数常量缺省为double型,如果后缀F(或f)可以使其成为float型7、字符串型常量是用双引号括起来的一个或多个字符。(要和字符常量区分)8、bool,值只能为true或false9、sizeof运算符用来求“类型名”所指定的类型或“表达式”的结果类型所占的字节数10、隐含转换,基本原则是将低类型数据转换为高类型数据11、从流中获取数据的操作称为提取操作“”,向流中添加数据的操作称为插入操作“”。12、cin用来处理标准输入,即键盘输入。cout用来处理标准输出,即屏幕输出。cout表达式表达式...cin表达式表达式...13、结构是由不同数据类型的数据组成的集合体。第三章函数1、函数的调用调用前先声明函数:若函数定义在调用点之前,则无需另外声明;若函数定义在调用点之后,则需要在调用函数前按如下形式声明函数原型:类型标识符被调用函数名(含类型说明的形参表);调用形式函数名(实参列表)嵌套调用函数可以嵌套调用,但不允许嵌套定义。递归调用函数直接或间接调用自身。2、函数的参数传递在函数被调用时才分配形参的存储单元。(经常考选择题)实参可以是常量、变量或表达式。实参类型必须与形参相符。(经常考选择题)值传递是传递参数值,即单向传递。(经常考选择题)引用传递可以实现双向传递(经常考选择题)常引用作参数可以保障实参数据的安全3、引用可以作为形参(作为形参不必初始化)voidswap(int&a,int&b){...}4、有缺省参数的形参必须在形参列表的最后,也就是说缺省形参值的右面不能有无缺省值的参数。因为调用时实参与形参的结合是从左向右的顺序。(要理解,考选择题)intadd(intx,inty=5,intz=6);//正确intadd(intx=1,inty=5,intz);//错误intadd(intx=1,inty,intz=6);//错误5、函数重载:C++允许功能相近的函数在相同的作用域内以相同函数名声明,从而形成重载。方便使用,便于记忆。要么形参类型不同,要么形参个数不同(不以形参名来区分,不以返回值来区分)6、很多标准C++函数继承自标准C,头文件以c开头:cmath,cstdlib,cstdio,ctime第四章类与对象1、抽象的实现:通过类的声明。2、类是具有相同属性和行为的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和行为两个主要部分。3、函数是将逻辑上相关的语句与数据封装,用于完成特定的功能。而类则是逻辑上相关的函数与数据封装,它是对所要处理的问题的描述。(非常重要的两句话)4、类是一种用户自定义类型5、在关键字private后面声明,只允许本类中的函数访问,而类外部的任何函数都不能访问。如果紧跟在类名称的后面声明私有成员,则关键字private可以省略。6、类的对象是该类的某一特定实体,即类类型的变量。(想不到吧)声明形式:类名对象名;例:ClockmyClock;类中成员互访:直接使用成员名类外访问:使用“对象名.成员名”方式访问public属性的成员7、在类中说明原型,可在类外给出函数体实现,并在函数名前使用类名加以限定。也可以直接在类中给出函数体,形成内联成员函数。8、内联成员函数(爱考选择题)为了提高运行时的效率,对于较简单的函数可以声明为内联形式。内联函数体中不要有复杂结构(如循环语句和switch语句)。在类中声明内联成员函数的方式:隐式——将函数体放在类的声明中。显式——使用inline关键字。9、结构与类的区别区别:(很重要)类中成员的缺省存储属性为私有的;结构体中的缺省存储属性为公有的.10、构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。在对象创建时由系统自动调用。如果程序中未声明,则系统自动产生出一个隐含的参数列表为空的构造函数允许为内联函数、重载函数、带默认形参值的函数11、拷贝构造函数是一种特殊的构造函数,其形参为本类的对象引用。class类名{public:类名(形参);//构造函数类名(类名&对象名);//拷贝构造函数...};类名::类(类名&对象名)//拷贝构造函数的实现{函数体}12、析构函数:在对象的生存期结束的时刻系统自动调用它,然后再释放此对象所属的空间。第五章数据的共享与保护1、类作用域作用于特定的成员名2、类X的成员m具有类作用域,对m的访问方式如下:如果在X的成员函数中没有声明同名的局部作用域标识符,那么在该函数内可以访问成员m。通过表达式X::m或者x.m访问。通过表达式ptr-m3、不在前述各个作用域中出现的声明,就具有文件作用域,这样声明的标识符其作用域开始于声明点,结束于文件尾。4、程序运行到某一点。能够引用到的标识符,就是该处可见的标识符。5、标识符应声明在先,引用在后。如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层可见。对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内层不可见。6、对象从产生到结束的这段时间就是它的生存期7、在函数内部声明静态生存期对象,要冠以关键字static。8、静态数据成员用关键字static声明该类的所有对象维护该成员的同一个拷贝必须在类外定义和初始化,用(::)来指明所属的类。(重要考点)9、静态成员属于类,非静态成员属于对象。静态成员函数只能引用属于该类的静态数据成员或静态成员函数。10、“常“常类型的对象必须进行初始化,而且不能被更新。常对象:必须进行初始化,不能被更新。const类名对象名常引用:被引用的对象不能被更新。const类型说明符&引用名常数组:数组元素不能被更新(下一章介绍)。类型说明符const数组名[大小]...常指针:指向常量的指针(下一章介绍)。11、一个源程序可以划分为多个源文件:类声明文件(.h文件)类实现文件(.cpp文件)类的使用文件(main()所在的.cpp文件)12、编译预处理#include包含指令将一个源文件嵌入到当前源文件中该点处。#include文件名按标准方式搜索,文件位于C++系统目录的include子目录下#include文件名首先在当前目录中搜索,若没有,再按标准方式搜索。#define宏定义指令定义符号常量,很多情况下已被const定义语句取代。定义带参数宏,已被内联函数取代。#defineMAX(a,b)((a)(b)?(a):(b))#undef删除由#define定义的宏,使之不再起作用。第六章数组指针与字符串1、数组元素所属类的构造函数不声明构造函数,则采用缺省构造函数。各元素对象的初值要求为相同的值时,可以声明具有默认形参值的构造函数。各元素对象的初值要求为不同的值时,需要声明带形参的构造函数。当数组中每一个对象被删除时,系统都要调用一次析构函数。2、指针变量的声明指针:内存地址,用于间接访问内存单元指针变量:用于存放地址的变量3、指针变量的赋值运算向指针变量赋的值必须是地址常量或变量,不能是普通整数。但可以赋值为整数0,表示空指针。指针的类型是它所指向变量的类型,而不是指针本身数据值的类型,任何一个指针本身的数据值都是unsignedlongint型。4、动态申请内存操作符newnew类型名T(初始化参数列表)功能:在程序执行期间,申请用于存放T类型对象的内存空间,并依初值列表赋以初值。结果值:成功:T类型的指针,指向新分配的内存;失败:抛出异常。5、释放内存操作符deletedelete指针p功能:释放指针p所指向的内存。p必须是new操作的返回值。6、申请和释放动态数组分配:new类型名T[数组长度]数组长度可以是任何表达式,在运行时计算释放:delete[]数组名p释放指针p所指向的数组。p必须是用new分配得到的数组首地址。7、用字符数组存储和处理字符串字符串常量(例:program)各字符连续、顺序存放,每个字符占一个字节,以‘\0’结尾,相当于一个隐含创建的字符常量数组;“program”出现在表达式中,表示这一char数组的首地址;首地址可以赋给char常量指针;constchar*STRING1=program;字符串变量可以显式创建字符数组来表示字符串变量,例如,以下三条语句具有等价的作用:charstr[8]={'p','r','o','g','r','a','m','\0'};charstr[8]=program;charstr[]=program;8、字符串的输入/输出方法逐个字符输入输出将整个字符串一次输入或输出例:charc[]=China;coutc;注意输出字符不包括'\0'输出字符串时,输出项是字符数组名,输出时遇到'\0'结束。输入多个字符串时,以空格分隔;输入单个字符串时其中不能有空格。9、字符串处理函数strcat(连接),strcpy(复制),strcmp(比较),strlen(求长度),strlwr(转换为小写),strupr(转换为大写)头文件string.h第七章继承与派生1、类的继承与派生保持已有类的特性而构造新类的过程称为继承。在已有类的基础上新增自己的特性而产生新类的过程称为派生。被继承的已有类称为基类(或父类)。派生出的新类称为派生类。2、一个派生类,可以同时有多个基类,这种情况称为多继承。一个派生类只有一个直接基类的情况,称为单继承。直接参与派生出某类的基类称为直接基类,基类的基类甚至更高层的基类称为间接基类。派生类成员是指除了从基类继承来的所有成员之外,新增加的数据和函数成员。3、派生类生成过程派生新类经历了三个步骤