1、C+程序设计复习,主讲人:谭成予 副教授 武汉大学计算机学院,E-MAIL:,1 面向对象的基本概念,面向过程与面向对象:对象、类、消息和事件(4,5)面向对象的基本特征:抽象性封装性继承性:单继承和多继承;取代继承、包含继承、受限继承和特化继承多态性:C+中的重载和虚函数常用面向对象语言简介:混合型面向对象语言C+,纯面向对象语言java,可视化语言VB等Windows程序设计的特点:事件驱动机制,2 C+语言基础,名字空间C+基本数据类型:整型、字符型、实型和逻辑型(bool)C+非基本数据类型数组、指针、结构等类引用概念、定义形式、使用,2 C+语言基础,常类型常变量常数组常指针:con
2、st在后,表示指针指向方向不能改变;const在前,表示指针指向对象的数值不能改变;常引用常对象:必须初始化,其不能改变其数据成员常成员函数:不更新对象的数据成员;通过常对象只能调用它的常成员函数;常数据成员:,2 C+语言基础,运算符和表达式作用域区分符(:)new和delete数据类型转换隐式类型转换和显式类型转换函数函数间的数据通信:按引用传递内联函数缺省参数函数重载名字空间与作用域异常处理try、 throw和catch语句捕获new抛出的异常,3 类和对象,类类的定义访问权限private、public和protected类成员函数的实现对象对象的定义引用对象成员构造函数和析构函数作
3、用定义形式调用规则:自动调用,3 类和对象,复制构造函数作用通常只有一个参数,且是同类对象的引用每个类必须有一个复制构造函数自动调用规则:当用类的一个对象去初始化该类的另一个对象时;当对象作为函数的实参传递给函数的形参时;当函数的返回值是类的对象,函数调用完成返回时;浅复制和深复制,3 类和对象,类静态成员静态数据成员:该类的所有对象共享;必须初始化;用:指明所属的类;静态函数成员:静态成员函数可以直接访问属于该类的静态数据和函数成员,但不能直接调用类中的非静态成员;友元友元函数:在其函数体中能够通过对象名访问 private 和 protected成员;友元类:友元类的所有成员能访问对方类的
4、私有成员;友元关系不具有传递性容器类、对象数组、对象指针等,3 类和对象,this指针编译器自动产生的隐含指针this指针的含义静态成员不能访问this指针UML类图,4 继承、派生,单继承公有、私有和保护继承派生类的构造函数和析构函数基类的构造函数不被继承,需要在派生类中自行声明;析构函数也不被继承;声明构造函数时,只需要对本类中新增成员进行初始化调用顺序多继承构造函数调用顺序多继承中的二义性问题及解决办法::、同名覆盖、虚基类;虚基类,4 继承、派生,基类成员访问当派生类的多个基类存在同名成员时:则派生类对些同名成员的访问就可能存在冲突解决办法:显式调用要访问的成员,成员名限定访问法:基类
5、名:成员名当派生类与基类中有相同成员时:若未强行指名,则通过派生类对象使用的是派生类中的同名成员在多继承时,基类与派生类之间,或基类之间出现同名成员时,将出现访问时的二义性(不确定性)采用虚函数或支配(同名覆盖)原则来解决赋值兼容性基类对象可以赋值给基类对象,也可以把派生类对象赋值给基类对象基类指针可以指向基类对象,也可以指向派生类对象基类引用可以指向基类对象,也可以指向派生类对象虚基类,5 虚函数和多态性,静态联编和动态联编虚函数动态联编的基础,多态性的体现之一;定义和调用抽象类带纯虚函数的类作用:派生类的公共根,6 运算符重载,运算符重载的基本形式可重载运算符定义形式:成员函数和友元函数=
6、”运算符重载不能被派生类继承一元运算符重载成员函数:aa . operator ( )友元函数:operator (aa)二元运算符重载成员函数:aa . operator ( bb )友元函数:operator (aa, bb),6 运算符重载,成员函数重载运算符一个变元隐式传递:注意+、-、=的语义问题:不适合于第一个参数需要隐式转换的情况友元函数重载运算符所有参数显式传递问题:如果需要修改对象的状态,则应当使用引用参数二元运算符重载成员函数:aa . operator ( bb )友元函数:operator (aa, bb)不能用友元函数重载的运算符: =、()、,6 运算符重载,重载+
7、和-前缀形式问题后缀形式:使用一个额外的整型参数来表明所需调用的是后缀形式的递增/递减运算符。重载赋值运算符基本形式:X & X : operator = ( const X & from);必须是成员函数重载( )和 基本形式必须是成员函数,7 模板,函数模板作用和定义方法模板函数的使用:实例化函数类模板用来创建类的配方类模板的定义类模板的使用:实例化模板类,8 STL,容器顺序容器: vector、list、deque 关联容器:set、multiset、map、multimap迭代器,9 流与文件,标准I/O流预定义了4个流类对象:cin,cout,cerr,clog非格式化输入输出cin、cout用ios类成员函数格式化输入输出:状态标志、输出宽度、填充字符以及输出精度用操作符函数格式化输入输出:后面跟输入输出格式文件操作,10 Windows编程,Windows消息标准Windows消息控件消息命令消息Windows程序结构Winmain()和WindowProc()处理Windows消息:GetMessageMFC基本概念给定布置好的界面、相应控件及其属性信息,针对控件事件完成编程工作,Q&A?,