第2章面向对象程序设计精.ppt
《第2章面向对象程序设计精.ppt》由会员分享,可在线阅读,更多相关《第2章面向对象程序设计精.ppt(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第2章面向章面向对象程序象程序设计第1页,本讲稿共29页2.1 2.1 类和对象类和对象类和对象是面向对象编程的核心,类和对象类似建筑图类和对象是面向对象编程的核心,类和对象类似建筑图纸和大楼的关系,类是对象的一种抽象,对象是类的一个实纸和大楼的关系,类是对象的一种抽象,对象是类的一个实例。在面向对象世界中,一切事物都可以用对象表示,对象例。在面向对象世界中,一切事物都可以用对象表示,对象间通过消息进行交流,无需了解对象的内部实现,只要知道间通过消息进行交流,无需了解对象的内部实现,只要知道各个对象提供的功能接口就能实现各种高级功能。各个对象提供的功能接口就能实现各种高级功能。第2页,本讲稿
2、共29页2.1.1 2.1.1 类和对象的关系类和对象的关系类是一种自定义数据类型,类似于类是一种自定义数据类型,类似于C中的结构体中的结构体(struct),不同之处在于类中包括数据和函数,而结构体),不同之处在于类中包括数据和函数,而结构体只有数据。类是对象的形式上的抽象,不是一个实际存在的只有数据。类是对象的形式上的抽象,不是一个实际存在的事物,它规定有哪些数据成员,哪些成员函数及具体功能,事物,它规定有哪些数据成员,哪些成员函数及具体功能,是对具体事物的一种描述。对象是类的实现(是对具体事物的一种描述。对象是类的实现(implement),),对象根据类的描述信息生成一个真实的事物,占
3、用实际内存,对象根据类的描述信息生成一个真实的事物,占用实际内存,对象生成时要调用类的构造函数(对象生成时要调用类的构造函数(construct)进行初始化)进行初始化(initialize),对象释放(),对象释放(Release)时要调用类的析构函)时要调用类的析构函数做必要的清理工作。数做必要的清理工作。第3页,本讲稿共29页2.1.2 2.1.2 定义类定义类使用使用class关键字定义一个类,可在类中添加成员变量关键字定义一个类,可在类中添加成员变量(member variable)和函数。一般在类里声明函数,在类)和函数。一般在类里声明函数,在类外实现函数以体现类的封装性,也可以声
4、明和实现都在类中外实现函数以体现类的封装性,也可以声明和实现都在类中完成,适用于简短且频繁调用的成员函数。通过类名调用函完成,适用于简短且频繁调用的成员函数。通过类名调用函数使用作用域解析操作符数使用作用域解析操作符:,如,如A:Calc();,通过对象名调,通过对象名调用函数使用圆点操作符用函数使用圆点操作符.,如,如a.Calc();。第4页,本讲稿共29页2.1.3 2.1.3 构造函数构造函数类不同于类不同于C+的基本数据类型,类的结构可能非常复杂,的基本数据类型,类的结构可能非常复杂,包括大量的成员变量和函数,仅仅简单的分配一块足够大小包括大量的成员变量和函数,仅仅简单的分配一块足够
5、大小的内存给类对象是不够的,还需要对类中的成员变量进行集的内存给类对象是不够的,还需要对类中的成员变量进行集中初始化。中初始化。C+提供构造函数来完成类对象的初始化操作,提供构造函数来完成类对象的初始化操作,构造函数先根据类的大小分配一块足够的内存用于存放类对构造函数先根据类的大小分配一块足够的内存用于存放类对象,再根据构造函数传入的参数和具体实现完成类对象的初象,再根据构造函数传入的参数和具体实现完成类对象的初始化。始化。第5页,本讲稿共29页2.1.4 2.1.4 析构函数析构函数类在释放自身之前可能需要做一些清理工作,如类在使类在释放自身之前可能需要做一些清理工作,如类在使用过程中动态分
6、配了内存空间,在类释放之前需要手动释放用过程中动态分配了内存空间,在类释放之前需要手动释放这些内存。析构函数用于完成类释放之前的一些清理工作,这些内存。析构函数用于完成类释放之前的一些清理工作,由由C+自动调用。自动调用。同构造函数,析构函数名为在类名前加同构造函数,析构函数名为在类名前加符号,如符号,如Rect(),析构函数没有返回值也没有参数列表,每个类只有一个,析构函数没有返回值也没有参数列表,每个类只有一个析构函数,若没有添加析构函数,析构函数,若没有添加析构函数,C+提供默认的析构函数,提供默认的析构函数,但什么也不做。但什么也不做。第6页,本讲稿共29页2.1.5 2.1.5 内联
7、函数内联函数程序代码中经常要调用函数,从调用点进入到函数的内程序代码中经常要调用函数,从调用点进入到函数的内部,执行完毕后返回调用点,函数调用需要一定的开销。部,执行完毕后返回调用点,函数调用需要一定的开销。C语言为节省函数调用带来的开销,常使用宏(语言为节省函数调用带来的开销,常使用宏(macro)的方)的方式模拟函数,如求和运算定义宏式模拟函数,如求和运算定义宏#define SUM(a,b)(a+b),编译时用宏替换代码,减少函数调用的开销。,编译时用宏替换代码,减少函数调用的开销。第7页,本讲稿共29页2.1.6 static2.1.6 static成员成员static(静态)关键字在
8、不同场合具有不同的意义,也(静态)关键字在不同场合具有不同的意义,也是常混淆用途的一个关键字(是常混淆用途的一个关键字(keyword)。在)。在C语言中,语言中,static有两层含义,若在函数外用有两层含义,若在函数外用static修饰全局变量和函数,修饰全局变量和函数,表示具有文件作用域,只能在本文件中可用,不能在其他文表示具有文件作用域,只能在本文件中可用,不能在其他文件中使用。件中使用。第8页,本讲稿共29页2.1.7 const2.1.7 const成员成员const(constant常量)修饰符用于表示一个变量在初常量)修饰符用于表示一个变量在初始化后不能再被修改,即只读(始化后
9、不能再被修改,即只读(read only)。)。const变量在变量在定义时必须同时进行初始化,常用在函数参数中,表示该参定义时必须同时进行初始化,常用在函数参数中,表示该参数在函数内部不会被修改。数在函数内部不会被修改。在传递类对象时,若采用传值方式,将类对象的拷贝传在传递类对象时,若采用传值方式,将类对象的拷贝传入函数,在类对象复杂的时候效率很低,一般传递类对象的入函数,在类对象复杂的时候效率很低,一般传递类对象的引用,但若使用引用方式,类对象的值可能会被函数修改,引用,但若使用引用方式,类对象的值可能会被函数修改,这时使用这时使用const修饰符可限定类对象的值为只读,如修饰符可限定类对
10、象的值为只读,如GetLength(const CString&str)。第9页,本讲稿共29页2.1.8 2.1.8 友元友元类的私有成员一般情况下在类外不可访问,但有时候需类的私有成员一般情况下在类外不可访问,但有时候需要在类外访问,可使用要在类外访问,可使用friend关键字,在被访问类中声明为关键字,在被访问类中声明为friend的类或函数可以访问其私有成员。的类或函数可以访问其私有成员。使用使用friend修饰的类、函数称为友元类、友元函数,友修饰的类、函数称为友元类、友元函数,友元不是类的成员,但能像类成员函数一样访问类的私有成员,元不是类的成员,但能像类成员函数一样访问类的私有成
11、员,当需要同时访问多个类的私有成员,适宜使用友元。当需要同时访问多个类的私有成员,适宜使用友元。第10页,本讲稿共29页2.2 2.2 运算符重载运算符重载C+提供一些运算符用于完成基本的运算,如提供一些运算符用于完成基本的运算,如+可以计可以计算两个整型或浮点类型数值的和,算两个整型或浮点类型数值的和,=可以判断两个值是否相可以判断两个值是否相等,但都只能用于预置的基本类型。若想用等,但都只能用于预置的基本类型。若想用+得到两个字符得到两个字符串拼接后的新字符串,用串拼接后的新字符串,用=判断两个类是否包含相同的值,判断两个类是否包含相同的值,可使用可使用C+提供的运算符重载功能,类似函数重
12、载,运算符提供的运算符重载功能,类似函数重载,运算符可看做函数名,运算符两边的变量可看做函数的参数,调用可看做函数名,运算符两边的变量可看做函数的参数,调用时根据运算符的参数数目和类型自动选择匹配的版本。时根据运算符的参数数目和类型自动选择匹配的版本。第11页,本讲稿共29页2.2.1 2.2.1 了解运算符重载了解运算符重载运算符重载在定义时使用运算符重载在定义时使用operator关键字,根据运算关键字,根据运算符操作数的数目分为一元重载和二元重载,如符操作数的数目分为一元重载和二元重载,如+、/、%为二为二元运算符,元运算符,+、-为一元运算符,为一元运算符,-当做减号为二元,当做负当做
13、减号为二元,当做负号为一元。号为一元。运算符可看做为函数,如运算符可看做为函数,如operator+类似类似Add(STR a,int b);+两边的操作数类似参数两边的操作数类似参数a、b,重载的运算符可作,重载的运算符可作为类的成员,也可作为类的友元函数,也可作为普通函数。为类的成员,也可作为类的友元函数,也可作为普通函数。第12页,本讲稿共29页2.2.2 2.2.2 一元重载一元重载一元重载只有一个操作数即类名,一般作为类成员,常一元重载只有一个操作数即类名,一般作为类成员,常用的一元运算符有自增、自减、求负运算符,其中自增、自用的一元运算符有自增、自减、求负运算符,其中自增、自减运算
14、有前后之分,运算符在前表示先自增自减,然后再赋减运算有前后之分,运算符在前表示先自增自减,然后再赋值,在后表示先赋值然后再自增自减,若为单独的表达式则值,在后表示先赋值然后再自增自减,若为单独的表达式则没有区别。默认重载没有区别。默认重载+、-为前缀版本,若表示后缀版本,为前缀版本,若表示后缀版本,添加一个添加一个int参数。参数。第13页,本讲稿共29页2.2.3 2.2.3 二元重载二元重载二元重载有两个操作数,若作为类成员,只需一个参数,二元重载有两个操作数,若作为类成员,只需一个参数,否则需要两个参数。参数的顺序代表操作数的位置,如否则需要两个参数。参数的顺序代表操作数的位置,如ope
15、rator+(A a,int b)调用形式为调用形式为a+2;不能为不能为2+a;若调换若调换位置也可用,要再重载一次如位置也可用,要再重载一次如operator+(int b,A a)第14页,本讲稿共29页2.3 2.3 继承性继承性面向对象编程的一个重要特性是继承性,类之间可以有面向对象编程的一个重要特性是继承性,类之间可以有继承关系,通过从一个父类派生出子类,子类在拥有父类功继承关系,通过从一个父类派生出子类,子类在拥有父类功能的基础上,添加新增的功能,无需从零开始构建整个类,能的基础上,添加新增的功能,无需从零开始构建整个类,只需要补充新增的功能即可。只需要补充新增的功能即可。C+允
16、许多重继承,即从多个允许多重继承,即从多个父类派生出一个子类,子类拥有多个父类的功能,多重继承父类派生出一个子类,子类拥有多个父类的功能,多重继承虽功能强大,却复杂难以理解,在虽功能强大,却复杂难以理解,在C#、Java中已取消了多中已取消了多重继承,应避免使用。重继承,应避免使用。MFC类库中绝大多数类都继承于类库中绝大多数类都继承于CObject类,类,CObject类提供了基本的服务,如运行时(类提供了基本的服务,如运行时(runtime)的类型判断、)的类型判断、对象的序列化存储等,所有从对象的序列化存储等,所有从CObject类继承的类自动具有类继承的类自动具有这些功能。这些功能。第
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计
限制150内