计算机程序设计语言_第1页
计算机程序设计语言_第2页
计算机程序设计语言_第3页
计算机程序设计语言_第4页
计算机程序设计语言_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

考试时间:

2010-07-09(星期五)10:30-12:30

考试地点:

东上院201

答疑时间:

2010-07-08(星期四)13:30-15:30

答疑地点:

下院二楼教师休息室

第10章创建功能更强的类型第11章运算符重载第12章组合与继承第13章泛型机制——模板第14章输入/输出与文件第15章异常处理第16章容器和迭代器第10章创建功能更强的类型从面向过程到面向对象类的定义对象的使用对象的构造与析构常量对象与const成员函数常量数据成员静态数据成员与静态成员函数友元早期的程序设计方法结构化的设计方法面向对象的程序设计的特点库和类为程序员提供了创建工具的功能解决一个问题时程序员首先考虑的是需要哪些工具创建这些工具用这些工具解决问题第10章创建功能更强的类型从面向过程到面向对象类的定义对象的使用对象的构造与析构常量对象与const成员函数常量数据成员静态数据成员与静态成员函数友元将函数放入结构体是从C到C++的根本改变它使结构体成为了和内置类型一样的一种全新的数据类型。为了表示这是一种全新的概念,C++用了一个新的名称—类来表示。类的定义class

类名{private:

私有数据和函数protected:

受保护数据和函数public:

公有数据和函数};类声明要注意的问题:类名是有效的标识符,不能是关键字(保留字)数据成员不能是正在声明的类,但可以用该类的指针类成员的默认成员访问说明符是private;访问控制public,private,protected可以以任意次序出现,并可重复多次第10章创建功能更强的类型从面向过程到面向对象类的定义对象的使用对象的构造与析构常量对象与const成员函数常量数据成员静态数据成员与静态成员函数友元对象定义:直接在程序中定义某个类的对象Rationalr1,r2;用动态内存申请的方法申请一个动态对象。Rational*rp;rp=newRational;对象的引用:对象名.数据成员名或对象指针->数据成员名对象名.成员函数名(实际参数表)或对象指针->成员函数名(实际参数表)第10章创建功能更强的类型从面向过程到面向对象类的定义对象的使用对象的构造与析构

常量对象与const成员函数常量数据成员静态数据成员与静态成员函数友元构造函数的特点定义对象时,系统会自动调用构造函数。构造函数的名字必须与类名相同构造函数可以有任意类型的参数,也可以不带参数,但不能具有返回类型。因此在定义构造函数时,不能说明它的类型,甚至说明为void类型也不行。如果没有给类定义构造函数,编译系统会自动生成一个缺省的构造函数。它只为对象开辟存储空间,空间中的内容为随机数。构造函数可以重载构造函数的使用:有了构造函数后,对象定义的一般形式为:类名对象名(实际参数表);其中,实际参数表必须和该类的某一个构造函数的形式参数表相对应。构造函数的另一个特点——初始化列表构造函数还有一个与普通函数不同的地方,就是可以包含一个构造函数初始化列表的形式对数据成员赋初始值。构造函数初始化列表位于函数头和函数体之间。它以一个冒号开头,接着是一个以逗号分隔的数据成员构造列表如IntArray的构造函数可写为

IntArray::IntArray(intlh,intrh):low(lh),high(rh){storage=newint[high-low+1];}必须用初始化的情况数据成员不是普通的内置类型,而是某一个类的对象,可能无法直接用赋值语句在构造函数体中为它赋初值。继承或组合时会有这种情况发生类包含了一个常量的数据成员,常量只能在定义时对它初始化,而不能对它赋值。因此也必须放在初始化列表中。

拷贝构造函数在创建一个对象时,可以用一个同类的对象对其初始化。这时需要调用一个特殊的构造函数,称为拷贝构造函数。

Rationalr1(3,11);Rationalr2(r1);//调用拷贝构造函数拷贝构造函数以一个同类对象引用作为参数,它的原型为:

函数名(const类名&ob);用户可以根据自己的需要定义拷贝构造函数拷贝构造函数的应用场合

1)一个对象通过另外一个对象进行初始化(对象定义);

2)一个对象以值传递的方式传入函数体;

3)一个对象以值传递的方式从函数返回;类变量的生命周期ClassTime{…};TimegTime;intmain(){ TimelTime1; staticTimesTime; TimelTime2;}构造函数调用顺序:1、gTime构造函数2、lTime1构造函数3、sTime构造函数4、lTime2构造函数析构顺序:(和类变量的存储形式有关)lTime2lTime1sTime4gTime创建顺序:遇到变量定义时调用构造函数消失顺序:1、局部变量先消失,然后是静态局部变量,最后是全局变量;2、后创建的先消失;第10章创建功能更强的类型从面向过程到面向对象类的定义对象的使用对象的构造与析构常量对象与const成员函数常量数据成员静态数据成员与静态成员函数友元const对象的定义

constClassNameobj(参数表);

constRationalr1(2,7);同样的,const对象不能被赋值,只能初始化,而且一定要初始化,否则无法设置它的值。任何不修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其他非const成员函数,编译器将指出错误,这无疑会提高程序的稳健性。const对象和const成员函数的调用规则规则

对象.成员函数对象成员函数对/错

constconst对

constnon-const错

non-constconst对

not-constnon-const对成员函数调用成员函数成员函数成员函数对/错

constconst对

constnon-const错

non-constconst对

not-constnon-const对第10章创建功能更强的类型从面向过程到面向对象类的定义对象的使用对象的构造与析构常量对象与const成员函数常量数据成员静态数据成员与静态成员函数

友元staticdoublem_rate;静态成员变量不属于对象的一部分,而是类的一部分;类定义并不分配空间,空间是在定义对象时分配。但静态数据成员属于类,因此定义对象时并不为静态成员分配空间;静态成员变量的初始化不能放在类的构造函数中。静态成员的定义一般出现在类的实现文件中。如在SavingAccount类的实现文件中,必须要如下的定义:

doubleSavingAccount::rate=0.05;静态成员函数成员函数也可以是静态的。静态的成员函数是为类的全体对象服务,而不是为某个类的特殊对象服务由于静态成员函数不需要借助任何对象就可以被调用,所以编译器不会为它暗加一个this指针。因此,静态成员函数无法处理类中的非静态成员变量。静态成员函数的声明只需要在类定义中的函数原型前加上保留词static。第10章创建功能更强的类型从面向过程到面向对象类的定义对象的使用对象的构造与析构常量对象与const成员函数常量数据成员静态数据成员与静态成员函数友元友元函数是一扇通往私有成员的后门。友元可以是一个一般函数(友元函数),也可以是另一个类的成员函数(友元成员),还可以是整个类(友元类)。友元特点:是授予的而不是索取的不是对称关系不是传递关系复习例子10.3(210页)10.4(211页)第11章运算符重载

什么是运算符重载

运算符重载的方法几个特殊的运算符的重载使系统内置的运算符可以用于自定义类型不是所有的运算符都能重载重载不能改变运算符的优先级、结合性、操作数个数不能创建新的运算符不能重载的运算符:

.

.*

::

?:

sizeof

第11章运算符重载

什么是运算符重载

运算符重载的方法

几个特殊的运算符的重载运算符重载功能通过重载函数实现函数可以是成员函数和友元函数,两者的区别重载函数原型为

返回类型operator@()第11章运算符重载

什么是运算符重载

运算符重载的方法

几个特殊的运算符的重载

赋值运算符下标运算符++和—运算符的重载重载函数的原型设计考虑输入输出运算符重载

第12章组合与继承组合继承虚函数与多态性纯虚函数与抽象类多继承组合就是把用户自定义类的对象(象内置类型一样)作为新类的数据成员组合表示一种聚集关系,是一种部分和整体(isapartof)的关系必须用初始化列表去初始化对象成员第12章组合与继承组合继承虚函数与多态性纯虚函数与抽象类多继承继承是面向对象程序设计的一个重要特征,它允许在已有类的基础上创建新的类派生类单继承的格式基类成员在派生类中的访问特性

派生类对象的构造、析构与赋值操作

重定义基类的函数派生类作为基类将派生类对象隐式转换为基类对象定义:

class派生类名:派生方法基类名

{//派生类新增的数据成员和成员函数

};派生类单继承的格式基类成员在派生类中的访问特性

派生类对象的构造、析构与赋值操作

重定义基类的函数派生类作为基类将派生类对象隐式转换为基类对象派生类不继承,而是能调用基类的构造函数、析构函数和赋值运算符派生类构造函数的格式:派生类构造函数名(参数表):基类构造函数名(参数表){……}如果派生类新增的数据成员中含有对象成员,则在创建对象时,先执行基类的构造函数,再执行成员对象的构造函数,最后执行自己的构造函数。

派生类单继承的格式基类成员在派生类中的访问特性派生类对象的构造、析构与赋值操作

重定义基类的函数派生类作为基类将派生类对象隐式转换为基类对象当派生类对基类的某个功能进行扩展时,他定义的成员函数名可能会和基类的成员函数名重复。如果只是函数名相同,而原型不同时,系统认为派生类中有两个重载函数。如果原型完全相同,则派生类的函数会覆盖基类的函数。这称为重定义基类的成员函数。派生类单继承的格式基类成员在派生类中的访问特性派生类对象的构造、析构与赋值操作

重定义基类的函数

将派生类对象隐式转换为基类对象

将派生类对象赋给基类对象基类指针指向派生类对象基类的对象引用派生类的对象第12章组合与继承组合继承虚函数与多态性纯虚函数与抽象类多继承多态性:不同对象收到相同的消息时产生不同的动作。实现方法:静态联编:编译时已决定用哪一个函数实现某一动作;函数重载动态联编:直到运行时才决定用哪一个函数来实现动作。虚函数(virtual)第12章组合与继承组合继承虚函数与多态性纯虚函数与抽象类

纯虚函数:是一个在基类中说明的虚函数,它在该基类中没有定义,但要在它的派生类里定义自己的版本,或重新说明为纯虚函数纯虚函数的一般形式

virtual类型函数名(参数表)=0抽象类:如果一个类中至少有一个纯虚函数,则该类被称为抽象类抽象类使用说明:

※抽象类只能作为其他类的基类,不能建立抽象类的对象。

基于控制台的I/O基于文件的I/O基于字符串的I/O

第14章输入输出与文件输出流输入流格式化输入/输出输出流(ostream)C++的类ostream提供了格式化输出和无格式输出的功能输出功能包括用流插入运算符(<<)输出标准类型的数据;用成员函数put输出字符;成员函数write的无格式化输出;输入流C++的类istream提供了格式化和无格式输入的功能输入功能包括用流提取运算符(>>)输入标准类型的数据;用成员函数get和getline输入字符;成员函数read的无格式输入;格式化输入/输出C++提供了大量的用于执行格式化输入/输出的流操纵算子和成员函数。<iomanip>功能:

整数流的基数:dec、oct、hex和setbase

设置浮点数精度:precision、setprecision

控制浮点数的输出:scientific、fixed

尾数和小数点:showpoint、fixed

设置域宽:setw、width

设置域填充字符:fill、setfill

对齐:left、right、internal文件访问过程定义一个流对象

打开文件、关闭文件访问文件ifstreaminfile;//定义对象

infile.open(“file1”);//调用成员函数或infile.open(“file1”,ifstream::in);用流对象的构造函数打开文件

ifstreaminfile(“file1”);或ifstreaminfile(“file1”,ifstream::in);关闭文件:用成员函数closeinfile.close();main函数执行结束时,会关闭所有打开的文件良好的程序设计习惯:文件访问结束时,关闭文件。尤其在一些大型程序中,一旦一个程序模块中没有关闭文件,在另一个模块中,就无法打开这个文件文件访问过程定义一个流对象

打开文件、关闭文件访问文件可以用流提取运算符“>>”从文件读数据,也可以用流插入运算符”<<”将数据写入文件,也可以用文件流的其他成员函数读写文件,如get函数,put函数等。在读文件操作中,可以通过基类ios的成员函数eof来实现和用流提取操作的返回值来判断是否文件尾。文件的随机访问

(seekg,seekp,tellg,tellp)从任意地方开始读写文件定位指针:是一个long类型的数据,指出当前读写的位置获取文件定位指针的当前位置:成员函数tellg和tellp(返回当前定位指针的值)设置文件定位指针的位置:成员函数seekg和seekp

使用定长记录的随机访问文件C++不提供文件结构。因此应用程序要自己生成随机访问文件。本课程讨论使用定长记录这种简洁明了的方法。因为随机访问文件中的每一条记录都有相同的长度,所以能够用记录关键字的函数计算出每一条记录相对于文件起始点的位置,然后可以用seekg和seekp函数重新有效定位。要求记录长度是固定的可以使用istream中的read函数和ostream中的write

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论