第一章 绪论
第二章 C++语言初步
第三章 基本数据类型与基本运算
第四章 基本控制结构与导出数据类型
第五章 函数、函数与运算符的重载
第六章 指针、引用于动态内存分配
第七章 类与对象
第八章 继承与派生
第九章 模板
第十章 输入输出流
学习指南

 

第一讲 绪论

面向对象的特征:封装和信息隐藏、抽象数据类型、继承和多态。

C++C相比其不同之处。

第二讲   C++语言初步

cincoutcerrclog的使用。

C++C之上增加的关键字:catchclassdeletefriendinlinenewoperatorprivateprotectedpublictemplatethisthrowtryvirtual

预处理命令的使用,特别是编写源程序文件时的包含命令,定义头文件时的条件编译命令。

熟练掌握VC环境下C++程序的上机过程。

第三讲基本数据类型和基本运算

基本数据类型有:char型、int型、float型、double型和void型。

基本类型的修饰词有:signedunsignedshortlong

导出类型有:枚举型、指针型、引用型、数组类型、结构类型、联合类型和类类型。

C++C之上增加的运算符有:<<(插入符)>>(析取符)、∷(作用域符)、newdelete

第四讲基本控制结构与导出数据类型

C++的语句有:空语句、表达式语句、声明语句、复合语句、if语句、switch语句、for语句、while语句、do-while语句、break语句、continue语句、return语句和goto语句。

第五讲函数、函数与运算符重载

函数原型的概念,引用作为函数的参数和函数的返回值是引用,具有缺省参数的函数,函数的重载,函数重载时二义性的消除。内联函数的定义和使用。

运算符重载函数的定义和运算符的重载。

第六讲指针、引用与动态内存分配

动态内存分配运算符:new delete

用指针进行动态内存分配和释放的方法:单个对象的分配与释放,单个对象分配时的初始化与释放,动态数组的分配与释放。

引用的进一步使用,引用与指针的比较。

第七讲类与对象

类是对象的抽象,是用户定义的数据类型。类将对象的属性和行为封装在一起,它也可以限制对成员的访问,即实现信息隐藏。类可以和预定义类型定义变量一样创建类的实例,即对象,也可以用newdelete运算符动态地创建和撤消对象,与结构一样,也可以用“.”和“→”运算符访问类对象的成员,但不能访问私有成员。私有成员只能在类内由成员函数访问。构造函数是一种特殊的成员函数,每当创建一个类实例时就自动调用。典型的用途是初始化数据成员,或执行为类投入使用所要求的任务,构造函数可带有参数,也可重载,缺省构造函数不带参数。析构函数也是一种特殊的成员函数,每当撤消一个对象时自动地调用,它不能有参数,因而不能重载。它通常用于该类对象分配的存储,或执行某种清理任务。在成员函数内,C++的关键字this是被引用对象的地址,这个地址是调用该函数的对象的地址,this指针是系统为类的每一个成员函数缺省提供的,以区分是在哪个对象上操作,每个非静态的成员函数可看成都拥有this指针。用关键字static定义的成员为静态成员,不管类的实例有多少个,静态数据成员的存在期间只有单个拷贝,公有静态成员可用类名加上作用域运算符访问,私有静态成员可定义公有静态成员函数间接访问之。若成员函数定义为常量类型,则此成员函数为常量成员函数,它不能修改调用该成员函数的对象。类的定义可以嵌套。一个函数,一个类的成员函数或一个类都可声明为另一个类的友元,友元可以访问该类的所有成员,友元破坏了封装,但也很灵活,如在运算符重载时经常用友元。

当类中含有指针数据成员,并要为它动态分配空间时,一般说来,该类中应定义四种成员函数:构造函数为类中的指针数据成员分配空间并初始化;拷贝构造函数正确初始化动态分配的空间;赋值运算符函数使赋值号左右两端对象中动态分配空间的值也相同;析构函数用delete显式删除用new动态分配的空间。

在以类为模块的程序中组织文件时,通常把类定义放在头文件中,头文件中应包含内联函数的定义,在包含头文件时为避免重复包含,每个头文件的定义应有条件编译命令控制。类的非内联成员函数的定义放在单独的C++源代码文件之中,即常说的类的实现文件,最后把编译过的类的实现文件和主函数所在文件链接在一起。

运算符函数可以重载除了 . 、∷、sizeof、?、:,这四种以外的标准C++运算符,运算符函数即定义了该运算符如何在指定的类对象上工作。运算符函数可以是类的成员函数,也可以是非成员函数。如果是非成员函数,一般将它声明为该类的友元,单目运算符函数通常定义为类的成员函数,=[ ]、()、->必须是非静态的成员函数,双目运算符包括<<>>最好定义为类的友元,<<>>必须是友元。当要定义后缀增(减)量时,表达式的值与对象的值是不同的,这种差异性由用户提供,运算符本身并不处理它。利用转换构造函数,可以使其它类型的对象转换为类对象;利用转换运算符,则可将运算对象转换成其它的类型。当某一个函数只有一个参数或者只有一个最重要的参数可以用operator( )将它组织成一个类,当然,这不是必须的,但用此法定义的迭代类,使用时更能体现对象是台自动机。

第八讲继承与派生

一个类可以从已有的类派生,它继承了已有类中可以继承的所有成员,并可增加新成员,这个已有的类即是基类,新类是派生类。当基类的构造函数有参数时,派生类的构造函数要用成员初始化符表来调用它。当基类中有保护成员时,派生类的成员函数可以访问保护成员,但其他函数不能访问。私有继承使得基类的公有成员和受保护成员都成为派生类的私有成员,公有继承却不会改变基类中成员的可访问性。

虚函数支持多态性,多态性是指可用单一指令执行多个不同操作的能力,具体是哪个动作要取决于参数与对象的类型。派生类对象的地址可以赋给指向基类的指针,用虚函数实现动态束定的关键是基类指针(或引用)与公有继承。虚函数可以隐藏派生类的类型信息,因而可用基类作为外部操作一组派生类的接口。用初始化符 =0  定义的虚函数叫做纯虚函数,含有纯虚函数的类叫做抽象基类,它不能生成实例。必须采用对象指针(或引用)的形式调用虚函数,才能实现动态束定。构造函数不能声明为虚函数,析构函数可以声明为虚函数。

多继承是指一个派生类可以有多个直接基类,在多继承中应注意解决二义性冲突。派生类如果共享基类的多个拷贝,此种继承称为重复继承。派生类如果共享基类的一个拷贝,此种继承称为共享继承。在共享继承中,共享基类应声明为虚基类。

第九讲模板与异常处理

模板是参数化类型,也就是说,它用类型作为参数。因而一个类模板定义了一组类或一个函数模板定义了一组函数。为模板指定参数的过程叫实例化。类模板实例化后是类而不是实例对象,函数模板不必显式实例化,调用它时,编译器会自动按模板生成其定义。类模板的参数可以是类型参数,也可以是具体类型,函数模板的参数只能是类型参数。可以为模板说明特殊版本,但类模板的特殊版本必须在第一次使用它之前有定义。类模板有两种友元:特定于某个实例化类的友元和所有实例化类的友元。

C++提供的异常处理机制主要是用来处理错误的方法,使用异常的好处在于可以把异常的检查和异常处理分开,从而简化了程序。主要概念有:异常包括异常检查和异常处理两部分,这两部分可存在于不同的函数中。但调用异常检查的函数应包括在try块中,这才能使异常处理程序可处理此种异常。如果一个try块有多个异常处理程序时,它将按catch语句声明的先后顺序,把第一个与异常对象类型匹配的catch语句作为处理程序。异常不一定是错误,它可以看成是一种普通的流程控制,用于处理很少发生的事情。

第十讲输入输出流

本章主要介绍了C++输入输出流类库,其主要概念如下:C++的流类是类型安全的、易于用户扩充的输入输出机制,在istreamostream类中,插入和析取运算都是为预定义类型定义的,但用户可以重载它们来为自定义类型指定输入和输出。利用ios类中的函数,可以控制输入输出数据的格式。格式的控制可通过直接调用函数和设定标志位两种方式。控制符可以放在流运算中,因而用它控制格式更为方便。利用ios类中的io_state,可以表示流的状态,并检查流的错误。文件可与流联系起来,这种流用于控制文件的输入与输出。文件流有两种输入输出方式,一种是正文方式,一种是二进制方式。正文方式把空白符作为每个串的分隔符,而二进制方式则不识别字符的含义。利用readwrite这两个成员函数可一次从文件中读写多个二进制字符,而用文件指针则可实现对文件的随机访问。字符串流可实现对内存中字符串的格式化输入输出,这可以使我们对设备的输入输出通过内存来间接进行。在使用以上内容时,要注意包含相应的C++流类库的头文件。

 

教学日历