版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、补充 C+语言复习主要内容 C+基本语法与C+程序结构 面向对象和类重载,继承,虚函数,多态程序设计语言程序设计语言C+典型的高级语言: C:过程式;C:+对象式。C+与面向对象程序设计: 1983年AT&T贝尔实验室公布C+是C的超集(Super Set), C+全面支持数据封装、继承性和多态性;同时又充分保留了C语言的简洁性和高效性。 C+支持面向对象程序设计,也支持其它程序设计方法C+程序开发环境 1、源程序:用高级语言编写的高级语言源程序。 2、目标程序:计算机能直接执行的机器语言程序。 3、编译器或解释器:源程序编译或解释目标程序 4、C+程序的执行过程:编辑(.cpp,.h)-编译
2、(.obj)-联接(.exe)-运行(ji) 5、集成环境Turbo-C+, Borland C+, Visual C+, C+Builder等 VC好还是C+好? 首先,我们要纠正一个错误的观点,C+是一种语言,而VC是一种编译器软件;VC是一个用来编写(编译)代码的平台,你可以在VC上面编写C+代码。 VC定义了自己的一些class library,用于方便进行可视化界面设计和其他用途等 不要被VC、BC、TC等词汇所迷惑他们都是集成开发环境,而我们要学的是一门语言; 会用Visual C+,并不说明你会C+;会用 C+,并不说明你会Visual C+; 面向对象技术不只是C+专有的;C+
3、程序的基本组成 类似于C语言,“类”的结构在后面介绍基本元素基本元素控制结构控制结构功能结构功能结构程序代码程序代码数据数据I/0表表达达式式语语句句变变常常量量选选择择循循环环函函数数C/C+程序结构物理上,一个C+程序可以放在一个或多个源文件中 基本元素C+的基本语法运算符,表达式,语句,常量变量,选择、循环控制语句等概念请翻阅书籍整型整型数值类型数值类型空类型空类型(void)字符类型字符类型(char)枚举类型(枚举类型(enum)结构体类型结构体类型(struct)共用体类型共用体类型(union)类类型类类型(class)基本类型基本类型复合类型复合类型引用类型引用类型数数据据类类
4、型型单精度型单精度型(float)双精度型双精度型(double)长双精度型长双精度型(long double)指针类型指针类型引用类型引用类型数组类型数组类型实型实型短整型短整型(short)整型整型(int)长整型长整型(long)布尔类型布尔类型(bool)基本数据类型、变量、常量、运算符与表达式1基本数据类型(整型,实型,字符型)的存贮长度、表示数据范围(p33)2整型、实型、字符型、字符串常量3运算符(p66)(1)算术运算符:,(注意整型 除法运算的特点,%用于整数)(2)关系运算符:,!,(3)逻辑运算符:&,|,!(4)自增减运算符(,)(5)赋值运算符:(6)强制类型转换(i
5、nt)a,求类型长度sizeof(),?表达式4 运算符的结合性:三单赋(左 右),其他从左到右5. 优先级顺序运算符的优先级 (算,关,逻) 例: int a = 4, b = 5, m; m = a = 4 & a + b 9 ;, cout 可以进行的运算:+,-,相减法,比较等。inta,b;int*p;int*q=&b;p=&a;a=3;b=5;*p=b;inta5;charb5;int*p;char*q=b;p=&a0;p+;q+;q+;?Pq,pq,pq函数函数是一个命名的程序块。函数定义 描述函数所执行的算法的过程,格式如下:类型 函数名(参数表)函数体例如:void swap
6、 (int& m,int &n)int temp=m;m=n;n=temp;函数原型声明:只说明了函数名而没有指定函数体,用于引用在程序其它地方定义的函数;类型 函数名(参数类型说明列表);/函数原型说明函数的调用方式:函数名(实参表); 参数传递方式分为:传值 与 传地址,如swap函数就是传地址1.C+基本语法与C+程序结构练习.C语言规定,标识符必须以( )或( )开头。.写出下列表达式的求值结果。(1)2+33 )( )(4)125%10*2( ) (5)sizeof (0.25) ( ) (6)1/2*(3+5)( )3.当算术表达式中出现了char型变量时,系统自动将该型变量值转换
7、为( )类型值才参与运算。4.结构化程序设计只需使用三种程序结构,分别是( )结构、( )结构和( )结构。5.语言的变量有种存贮类型,即extern、static、register和( )。一、单项选择题(1.510分)1在 IBM-PC机中,一个unsigned int型数据在内存需占用( )字节。(A) 1 (B)2 (C)4 (D)82下列符号中,合法的C常量是( )。(A)097 (B)0.5e+1.0 (C)0 x5FH (D) 3. 若变量已有正确定义,程序 a = 0 ; for ( i =1 ; i = n ; i + + ) for ( j =0 ; j = i ; j +
8、 + ) a + + ; 执行后,变量a的值是( )。(A)n (n +1 ) / 2 (B)( n + 1 ) ( n + 2 ) / 2 (C)n ( n1) / 2 (D)n ( n + 3 ) / 24已知变量p , q是两个同类型的指针变量,下列表达式有语法错误的是( )。(A)p+1 (B)p+ (C)p+q (D)p - -5有定义static int a = 0 , 1 , 2 , 3 , 4 , *p ; 执行语句p = a + 2 ; 后,表达式*+p的值为( )。(A)1 (B)2 (C)3 (D)46C语言的数组下标固定从( )开始。(A)0 (B)1 (C)动态指定的
9、整数 (D)下标起始值并不固定7以下语句用于跳出循环体的是( )。(A)break; (B)continue; (C)return; (D)quit;8C语言存贮字符串时,用特殊字符( )表示字符串结束。(A)x0a (B)0 (C)13 (D)0练习答案 一、1. 字母下划线 2. (1) 2 (2) 1 (3) 0 (4) 10 (5) 8 (6) 0 3. int 4. 顺序选择(条件、分支、判断)循环(重复) 6. Auto 二、1. B 2. D 3. D 4. C 5. C 6. A 7. A 8. D编程练习1.从键盘上输入一个正数,判断它是否是素数。2.从键盘上输入若干个字符存
10、放在一个字符数组中,然后再将数组的字符逐一输出显示在屏幕上。 面向对象的程序设计 (Object-Oriented Programming)类:是对具有共同属性和行为的一类事物的抽象。对象:一个具体的事物,是类的一个实例。 对象的属性(静态特征):尺寸、形状、颜色、重量等。用数据成员来描述。 对象的行为(动态特征):如球的膨胀、收缩,汽车的加速、刹车、转向等,用一组成员函数(操作、方法)来描述。类和对象之间是抽象和具体的关系。从程序设计的角度看:类是对象的抽象,对象是类的实例面向对象思想是对现实世界活动的直接模拟类的封装性类的封装性C+中的类 C+中的类就是一种用户定义的数据类型,和其它数据类
11、型中的类就是一种用户定义的数据类型,和其它数据类型不同的是,组成这种类型的不仅可以有数据,而且可以有对不同的是,组成这种类型的不仅可以有数据,而且可以有对数据进行操作的函数。数据进行操作的函数。 C+中定义类的一般格式如下:中定义类的一般格式如下:classprivate:protected:public:;注意分号C+中的类(2)1、class:是类定义的关键字。:是类定义的关键字。2、类名:是用户命名的标识符。、类名:是用户命名的标识符。3、类中定义的数据成员和成员函数,分别描述了对象的属性和对象的行、类中定义的数据成员和成员函数,分别描述了对象的属性和对象的行为。为。4、访问权限:用于规
12、定类中成员的访问属性,是、访问权限:用于规定类中成员的访问属性,是C+实现封装的基本手实现封装的基本手段。段。public:公有访问属性,成员可以被任意函数所使用。:公有访问属性,成员可以被任意函数所使用。private:私有访问属性,成员只能被该类的成员函数和友元函数所:私有访问属性,成员只能被该类的成员函数和友元函数所使用。使用。protected:保护访问属性,成员只能被该类的成员函数和友元函数:保护访问属性,成员只能被该类的成员函数和友元函数以及派生类的成员函数和友元函数所使用。以及派生类的成员函数和友元函数所使用。类中成员的默认访问属性为类中成员的默认访问属性为private。一般情
13、况下,类向外界提供的。一般情况下,类向外界提供的接口通常声明为接口通常声明为public,类的数据成员通常声明为,类的数据成员通常声明为private。类的声明 一个类的声明的例子:TimeType.h 用类来实例化一个对象TimeType time; 类中的成员的访问方法 在类作用域内:可以直接访问任何成员。 在类作用域外:只能访问公有成员: 对象名.成员名 对象指针成员名,例如:time.Set(12,0,0 ); 每个类类型的大小,等于所有数据成员所占存储字节数的总和。 每个类对象中只保留有数据成员的存储空间,不保留有成员函数的存储空间。类的实现类的实现文件的例子:TimeType.cp
14、p成员函数的定义 可以直接在类中给出定义 也可以在类中给出声明,而在类外给出完整的定义。成员函数在类外定义时,函数名前面必须带有所属类的类名和类区分符(:),以指定该成员函数的所在类A与int类(型)的定义: int :C+系统定义 class A A();void print();.A(); ; 类型使用;A a;int a; 常量: const int a=10; 变量的指针: int a; int *p=&a; 变量的引用: int &ra=a; 常对象: const A a(10); 对象指针: A a; A *p=&a; p-print(); 对象的引用: A &ra=a; 类型转换
15、: int a=10; double b=3.14; b=a; a=(int)b; 类型转换: A a; a=12.5;(调用单参构造函数); operator(); R r(12,8); double d=4.5,f=3.8; d+=r-f; (d+=12/8-3.8) int数组: int a5; int *p=&a0; int 指针数组: int *q5; q0=p; 对象数组: A a5; A *p=&a0; 对象指针数组: A *q5; q0=p;new和deleteintint *p;p=new int(5);int *q=new int5;delete p;delete q;AA
16、 *pp=new A(5);A *q=new A5;delete p;delete q;生存期 局部 函数体内定义 全局 程序级 静态 内部:函数体内定义 外部:函数体外,文件级函数重载(function overriding)函数重载:两个以上的函数,取相同的函数名,但是形参的个数类型或顺序不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数。返回值类型不同不能做为函数重载的条件。运算符重载(operator overriding)希望能够像使用C+基本数据类型一样,使用运算符来实现以类作为操作数的运算定义重载双目操作符的成员函数时,参数表中只需要定义一个参数,该参数是进
17、行双目运算的第二个参数,而第一个参数为调用该函数的对象;定义重载单目操作符的成员函数时,参数表为空(除重载后缀加或减需要一个整型参数外),单目运算的参数为调用该函数的对象。在C+中,除了. .* : ?: 等操作符外,其它操作符都可以被重载运算符函数可以重载为类的成员函数,也可以重载为友元函数友元函数:不受成员访问限制关键字的影响,在上例中是全局函数如果 TimeType t1,t2;t1=t2+1; t1=t2.operator+(1)或者operator+(t2,1) 构造函数(constructor)构造函数是一种特殊的成员函数,作用是为对象分配存储空间,对数据成员进行初始化。构造函数的
18、名字必须与类同名,没有返回类型和返回值。声明类对象时,系统自动调用构造函数,构造函数不能被显式调用;构造函数可以重载,从而提供初始化类对象的不同方法。构造函数应定义为公有成员。如果程序员没有为类定义构造函数,系统会自动生成一个构造函数,但这种构造函数的函数体为空,不进行任何初始化TimeTypet(10,30,0);/t=10:30:0TimeTypet;/t=0:0:0析构函数(destructor)析构函数也是一种特殊的成员函数, 作用:在系统收回对象的内存之前对每个类对象进行清理工作,使内存可以复用于保存新对象。析构函数的名字由”和类名组成,没有任何参数,也不返回任何值。 撤消类对象时,
19、系统自动调用析构函数。析构函数不能重载,一个类只可能有一个析构函数。析构函数应定义为公有成员。如果程序员没有为类定义析构函数,系统会自动生成一个析构函数,但这种析构函数的函数体为空,不执行任何操作。通常利用析构函数删除对象中指针成员所指向的动态分配的存储空间,当类中没有指针成员时,则不需要定义析构函数。例如对于自定义的Array类,含有成员变量int *a;在构造函数的时候a=new int100;使用了动态存储空间,所以需要定义析构函数: Array( ) delete a; coutdestructorendl;类的继承(inheritance)继承是面向对象程序设计的最重要的特点之一,是
20、软件重用的一种重要形式,类的继承创建了一种类的层次结构(类等级、类族)。继承的实质:是从已有的类建立新类。通过特殊化已有的类来建立新类的过程称为类的派生。原有的类叫做基类或父类;新建立的类叫做派生类或子类。通过继承,派生类自动拥有基类的所有成员(数据成员和成员函数)。定义派生类class : ;1、 派生类名:是用户命名的标识符,用于标识新定义的类。2、 基类表:用于指明派生类的基类,基类可以有一个或多个, 单继承:派生类只有一个直接基类,简单。 多继承:派生类有多个直接基类,复杂、易出错,但功能强大。 3、每个基类前面应有一个继承权限指明符:规定基类成员在派生类中的访问属性。默认的继承权限指
21、明符为private。 public:公有继承(公有派生),是最常用的。基类的公有成员在派生类中仍是公有的;基类的保护成员在派生类中仍是保护的;基类的私有成员在派生类中是不可直接访问的。 private:私有继承(私有派生),不利于进一步派生,实际中用的不多。基类的公有成员和保护成员在派生类中是私有的;基类的私有成员在派生类中是不可直接访问的。 protected:保护继承(私有派生)。基类的公有成员和保护成员在派生类中是保护的;基类的私有成员在派生类中是不可直接访问的。每个派生类对象所占有的存储空间的大小等于其基类部分的所有数据成员占有的存储空间的大小与新定义部分的所有数据成员占有的存储空间
22、的总和。单继承举例在派生类的构造函数中,对基类成员进行初始化是通过在初始化表中显式调用基类的构造函数来实现的,格式为:基类名(实参表)。多继承举例(1) 当一个派生类中同时含有子对象时,派生类构造函数的执行顺序是:首先调用基类的构造函数实现对基类成员的初始化,接着调用子对象所属类的构造函数实现子对象的初始化,最后实现对派生类对象员的初始化。 析构函数的执行顺序正好相反:先执行派生类的析构函数,接着执行类成员的析构函数,最后执行基类的析构函数。 当有多个基类时,基类构造函数的调用顺序:取决于派生类声明时基类表中的顺序。析构函数的调用顺序正好相反。多继承举例(2)虚函数和多态虚函数是C+中用于实现
23、多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。虚函数:用关键字 virtual 修饰的成员函数。当基类和派生类中的相同函数定义为虚函数后,通过基类指针可以调用任一个类中的虚函数执行,具体调用哪一个类中定义的虚函数则取决于程序运行时赋给基类指针的对象类型而定。一个虚函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的这种通过调用基类的虚函数实际上能够调用一组虚函数中的任一个执行的技术称为多态性。多态(polymorphism) 多态性的实现:必须通过虚函数和基类指针(或基类引用)实现。 好处:“以不变应万变”多态(2) 只需要知道调用“绘图”函数就可以了
24、虚函数与多态(cont.)当把基类中的一个函数定义为虚函数后,其直接派生类和间接派生类中的与基类虚函数原型完全相同的成员函数,不管是否带有关键字 virtual,均被系统认为是虚函数。构造函数不能定义为虚函数,但析构函数可以定义为虚函数。 要实现类的多态性,还必须把所有派生类对基类的继承定义为公有继承,把每个类中的虚函数定义为公有成员函数。 纯虚函数:在声明为“初始值”为0的虚函数。 定义格式: virtual 成员函数的原型 = 0 ;纯虚函数不需要定义函数体。含有纯虚函数的类叫作抽象基类。抽象基类只管定义纯虚函数的形式,具体的功能由派生类实现。抽象类不能用来定义普通对象,但是可以用来定义指
25、针和引用。抽象类的用途:为其它类提供合适的基类。函数模板当几个函数的功能完全相同,只是所处理的数据的类型不同时,可以使用函数模板。函数模板的定义形式:template 函数类型 函数名 ( 形参表 ) 函数体类型形式参数,对应的类型实参可是系统预定义类型或用户自定义类型。类型参数表形如:class:表示后面跟的是一个类型参数。函数模板定义体与普通函数的定义一样,只不过其中的有些数据类型要用类型参数表中的标识符T1,T2等来表示。函数模板的调用格式: 数模板名(实参表)类模板 类模板:是带类型参数的类。 定义类模板中的类的格式如下: template class ; 其中:类型参数表的形式和要求与函数模板相同。类体的定义方法与普通类的定义方法相同,只不过其中的有些数据类型,要用类型参数来表示。类模板(2) 在使用类模板时首先要把它实例化为一个具体的类,这个具体的类称为模板类(或类模板的一个实例)。 把类模板实例化为模板类的格式如下: 类名 对象名类模板(2)类模板(3)类模板的成员函数可以在类内定义,也可以在类外定义。在类内定义比较简单,和普通类在类内定义成员函数基本相同,不同之处在于其中可能出现模板参数。在类外定义模板类的成员函数形式如下:template 返回类型 类名:成员函数名(函数形参表).引用类型
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云南艺术学院《最优化理论与算法Ⅱ》2023-2024学年第一学期期末试卷
- 二零二五年度章筠离婚案件中商标权益分配协议3篇
- 二零二五年度生态环保型房屋建设质量保修合同3篇
- 二零二五年度房屋交易-买卖双方隐私保护协议3篇
- 2024版航空公司飞机采购合同
- 2025届高考地理一轮复习热点滚动测一含解析
- 二零二五年度石油勘探与开发技术服务合同2篇
- 二零二五年度生态环保工程居间服务协议3篇
- 人教版六年级(上)语文作业本全册答案
- 二零二五年度环境监测技术服务合同集2篇
- 工程材料(构配件)设备清单及自检结果表
- 沪教版 三年级数学上册 图形与几何习题2
- 大使涂料(安徽)有限公司年产6万吨科技型工业涂料、水性环保涂料生产项目环境影响报告书
- 利乐包和康美包的比较
- 法院执行庭长供职报告1400字
- 推动架机械加工工序卡片
- 重庆市綦江区篆塘镇白坪村建筑用砂岩矿采矿权评估报告
- 甘肃社火100首歌词
- 行政查房情况记录表
- GB/T 2315-2000电力金具标称破坏载荷系列及连接型式尺寸
- 腹主动脉瘤的护理查房
评论
0/150
提交评论