欢迎来到天天文库
浏览记录
ID:50082312
大小:356.00 KB
页数:25页
时间:2020-03-08
《C++面向对象程序设计教学课件曹静第06章 多态性与虚函数.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第6章多态性与虚函数6.1多态性概述6.2重载与再定义6.3运算符重载6.4虚函数6.5抽象类2021/10/5C++面向对象程序设计6.1多态性概述6.1.1多态的类型6.1.2多态的实现2021/10/5C++面向对象程序设计6.1.1多态的类型多态性是指同一个消息被不同类型的对象接收时产生不同的行为,特点就是一个接口,多个实现。C++中多态性按照类型可以分为强制多态、过载多态、包含多态和参数多态四种。强制多态是指通过语义操作,强制数据做本不属于该类型数据的操作。编译器内部的数据的隐式转换,比如3.0+4操作时转换成3.0+4.0就属于此种类型重载多态是指函数重载,同名的操作在
2、不同的环境下有不同的行为。前面学习过的普通函数重载和将要学习的类成员函数重载、运算符重载都属于此种类型。包含多态是指在同一类族中定义于不同类中的同名函数的多态行为。我们本章将要学习的虚函数就属于此种类型。参数多态是指功能、结构实现相同但所作用于的数据类型不同,也就是数据类型参数化的多态。第七章中的函数模板和类模板就属于此种多态。2021/10/5C++面向对象程序设计6.1.2多态的实现多态是指同一个消息被不同的对象接收产生不同的行为,因此,多态在实现的时候必须确定消息的操作对象。我们根据消息和对象相结合的时间分为两种:在程序编译连接阶段完成的,也就是说在编译的过程中确定了消息的操
3、作对象,我们称为静态绑定。在程序运行阶段完成的,也就是说在程序运行的过程中才确定消息的操作对象,我们称为动态绑定。2021/10/5C++面向对象程序设计6.2重载与再定义6.2.1函数的重载6.2.2函数的再定义2021/10/5C++面向对象程序设计6.2.1函数的重载函数重载是指功能相似,函数名相同但所带参数不同的一组函数。这里的“所带参数不同”既可能是参数的数据类型不同也可能是参数的个数不同。普通函数的重载。intabs(intval){returnval<0?–val:val;}floatabs(floatval){returnval>0?–val:val;}2021/1
4、0/5C++面向对象程序设计6.2.1函数的重载类成员函数的重载。classTdate{private:intmonth,day,year;public:Tdate();Tdate(intm,intd,inty);};Tdate::Tdate(){month=6;day=20;year=2002;cout<5、象程序设计6.2.2函数的再定义函数的再定义是指派生类新增了和基类中函数名相同,所带参数也相同的成员函数(如果参数不同就属于函数重载)。派生类中函数再定义的时候,派生类中的函数成员覆盖了基类中的同名函数成员,通过派生类对象调用该函数成员时,调用的是派生类中新增的同名函数成员。要想在派生类中访问基类的同名成员,可以用前面讲过的作用域限定符。派生类中函数再定义的时候,通过基类指针来访问该函数成员时,访问的是派生类从基类继承的函数成员。2021/10/5C++面向对象程序设计6.3运算符重载6.3.1运算符重载的规则6.3.2运算符重载为成员函数6.3.3运算符重载为友元函数2021/16、0/5C++面向对象程序设计6.3.1运算符重载的规则运算符重载的规则如下:只能重载已有的运算符,不能定义新的运算符,也不能改变原有运算符的含义。运算符的优先级、结合性和操作对象的个数不能改变。重载的运算符函数参数不能有默认参数,不能全部是预定义数据类型。绝大部分重载的运算符函数都能被派生类继承,赋值运算符除外。关系运算符“.”、作用域分辨符“::”、成员指针运算符“*”、sizeof运算符和三目运算符“?:”这五个运算符不能被重载。运算符重载为类的成员函数的语法形式:2021/10/5C++面向对象程序设计6.3.1运算符重载的规则运算符重载为类的成员函数和友元函数的语法形式函数7、返回类型operator运算符(形式参数){函数体;}函数返回类型operator运算符(形式参数){函数体;}2021/10/5C++面向对象程序设计6.3.2运算符重载为成员函数运算符重载为类的成员函数,它就可以访问类的数据成员。使用重载运算符的时候,通过类的对象来调用运算符重载函数。调用过程是隐式的,看起来和一般的运算表达式一样,程序编译的时候已经转换成对运算符函数的调用;。运算符操作对象给出是隐式的,一个运算符操作的是对象本身的数据,即this指针指出。202
5、象程序设计6.2.2函数的再定义函数的再定义是指派生类新增了和基类中函数名相同,所带参数也相同的成员函数(如果参数不同就属于函数重载)。派生类中函数再定义的时候,派生类中的函数成员覆盖了基类中的同名函数成员,通过派生类对象调用该函数成员时,调用的是派生类中新增的同名函数成员。要想在派生类中访问基类的同名成员,可以用前面讲过的作用域限定符。派生类中函数再定义的时候,通过基类指针来访问该函数成员时,访问的是派生类从基类继承的函数成员。2021/10/5C++面向对象程序设计6.3运算符重载6.3.1运算符重载的规则6.3.2运算符重载为成员函数6.3.3运算符重载为友元函数2021/1
6、0/5C++面向对象程序设计6.3.1运算符重载的规则运算符重载的规则如下:只能重载已有的运算符,不能定义新的运算符,也不能改变原有运算符的含义。运算符的优先级、结合性和操作对象的个数不能改变。重载的运算符函数参数不能有默认参数,不能全部是预定义数据类型。绝大部分重载的运算符函数都能被派生类继承,赋值运算符除外。关系运算符“.”、作用域分辨符“::”、成员指针运算符“*”、sizeof运算符和三目运算符“?:”这五个运算符不能被重载。运算符重载为类的成员函数的语法形式:2021/10/5C++面向对象程序设计6.3.1运算符重载的规则运算符重载为类的成员函数和友元函数的语法形式函数
7、返回类型operator运算符(形式参数){函数体;}函数返回类型operator运算符(形式参数){函数体;}2021/10/5C++面向对象程序设计6.3.2运算符重载为成员函数运算符重载为类的成员函数,它就可以访问类的数据成员。使用重载运算符的时候,通过类的对象来调用运算符重载函数。调用过程是隐式的,看起来和一般的运算表达式一样,程序编译的时候已经转换成对运算符函数的调用;。运算符操作对象给出是隐式的,一个运算符操作的是对象本身的数据,即this指针指出。202
此文档下载收益归作者所有