C程序的设计简明教程第8章多态性

上传人:博****1 文档编号:588089427 上传时间:2024-09-07 格式:PPT 页数:27 大小:270.50KB
返回 下载 相关 举报
C程序的设计简明教程第8章多态性_第1页
第1页 / 共27页
C程序的设计简明教程第8章多态性_第2页
第2页 / 共27页
C程序的设计简明教程第8章多态性_第3页
第3页 / 共27页
C程序的设计简明教程第8章多态性_第4页
第4页 / 共27页
C程序的设计简明教程第8章多态性_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《C程序的设计简明教程第8章多态性》由会员分享,可在线阅读,更多相关《C程序的设计简明教程第8章多态性(27页珍藏版)》请在金锄头文库上搜索。

1、第8章 多态性 8.1 概述8.2 运算符重载8.3 虚函数8.4 抽象类 .8.1 概述多态性polymorphism是指不同类型的对象在收到相同的消息时,做出了不同的响应。C+语言的多态性是指定义了一批名字相同的函数,但是它们执行的是不同的操作。 .绑定绑定binding是指把一条消息与一个对象的方法相结合的过程,具体地说,绑定就是把一个标识符与一个存储地址联系在一起,以确定操作的具体对象。按绑定的时机划分,有静态绑定和动态绑定。其中静态绑定在程序编译链接的阶段完成,又称为前期绑定;动态绑定则是在程序运行的阶段完成,又称为后期绑定。 .动态绑定静态绑定支持的多态性称为编译时的多态性,C+主

2、要通过函数重载和运算符重载,实现编译时的多态性。动态绑定支持的多态性称为运行时的多态性,C+主要通过虚函数和抽象类,实现运行时的多态性。 .8.2 运算符重载通过定义函数重新解释运算符的方式,将运算符和类的对象结合在一起,这称为运算符重载。运算符重载是C+提供的一个华丽的技巧,使程序员可以为用户设计更为直观的接口,并且增强了程序的可读性。 .规则规则 C+语言的大部分运算符都可以被重载,只有5个运算符不能被重载。 运算符重载的本质是函数重载,在函数的定义中对运算符的操作赋予程序员自己新的解释。 C+的运算符重载一般有两种形式,重载为类的成员函数和重载为类的友元函数。 .说明 1.只能重载现有的

3、运算符,不能主观臆造C+语言未提供的运算符。2.运算符重载不能改变运算符固有的优先级、结合性以及操作数的个数。3.运算符重载的参数中至少有一个是自定义类型。4.运算符重载必须显式定义。5.不要试图改变运算符的原有语义。.重载为成员函数重载为成员函数 class 类名 public: 类型 operator 运算符(形参列表); ; 类型 类名:operator 运算符(形参列表) .说明 运算符重载为类的成员函数时,其函数形参的个数通常要比运算符原来的操作数少一个。重载后缀运算符+时,其函数要增加一个整型形参。该形参只给出类型int),不给出名字,它仅仅起到区别前缀运算符和后缀运算符的作用,并

4、不参与实际的运算。 .重载为类的友元函数 class 类名 public: friend 类型operator 运算符(形参列表); ; 类型 operator 运算符(形参列表) .流插入运算符的重载 class fraction public: friend ostream& operator (ostream& out, const fraction &s); ;. ostream& operator (ostream& out, const fraction &s) outs.a”/”的重载,必须采用重载为成员函数的形式。如果类中定义了指针成员,则必须显式地定义赋值运算符重载函数,进行

5、深拷贝。下标运算符重载之后,使得对象可以象数组一样动作。函数调用运算符的重载,使得对象的行为与函数的行为类似。 .向量类 class vect public: vect& operator =(vect &s); int operator (int i); int operator ()(int i); private: int len; /向量长度 int *p; ;.=重载 vect& vect:operator =(vect &s) for(int i=0;ilen;i+) *(p+i)=*(s.p+i); return(*this);/返回对象自身 . 重载重载 int vect:op

6、erator (int i) if(ilen) error(1); return(*(p+i-1); .( )重载 int vect:operator ()(int i) if(ilen) error(1); return(*(p+i-1); .8.3 虚函数 class 类名 public: virtual 类型 函数名(形参列表);/虚函数 ;.说明 1.关键字virtual只能出现在成员函数的声明中。2.如果在基类中已经声明了虚函数,则派生类中原型相同的成员函数将自动成为虚函数。3.静态成员函数不得被声明为虚函数。4.构造函数不允许被声明为虚函数,但允许声明虚析构函数。.案例 class

7、 A public: A(int x); virtual void display(void);/虚函数 protected: int a; ;. class B:public A public: B(int x,int y); void display(void); protected: int a; ;. class C:public A public: C(int x,int y); void display(void); protected: int a; ;. class D:public C public: D(int x,int y,int z); void display(vo

8、id); private: int a; ;.多态性 A s0(0); B s1(0,1); C s2(0,2); D s3(0,2,3); A *p4=&s0,&s1,&s2,&s3; for(int i=0;idisplay(); .8.4 抽象类类族中最顶层的基类是最为抽象的,它常常无法描述事物的细节,也无须描述事物的细节,只是作为类族中一个统一的标准和接口。 既然不能给出具体的实现代码,自然就用不着写出函数体。C+提供了纯虚函数,并规定只要某个类拥有纯虚函数,该类就自动成为抽象类。 .纯虚函数 class 类名 public: virtual 类型 函数名(形参列表)=0; ;.说明 由于纯虚函数的存在,抽象类无法实例化,即不能创建对象。如果某个类是从抽象类派生而来,并且仍然没有在类中提供纯虚函数的具体定义,则该派生类也是抽象类。抽象类的唯一用途就是为其它派生类提供公共的基类,其它类可以从它这里继承并实现接口。.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号