C++语言程序设计(清华大学郑莉)八ppt课件.ppt
《C++语言程序设计(清华大学郑莉)八ppt课件.ppt》由会员分享,可在线阅读,更多相关《C++语言程序设计(清华大学郑莉)八ppt课件.ppt(54页珍藏版)》请在三一办公上搜索。
1、1,第八章 多态性,清华大学 郑 莉,C+语言程序设计,2,本章主要内容,多态性运算符重载虚函数纯虚函数抽象类深度探索,3,多态性的概念,多态性是面向对象程序设计的重要特征之一。多态性是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为。多态的实现:函数重载运算符重载虚函数,4,问题举例复数的运算,class Complex /复数类声明public:Complex(double r = 0.0,double i = 0.0) real = r; imag=i; void display() const;/显示复数的值private:double real;double imag;
2、,运算符重载,5,问题举例复数的运算,用“+”、“-”能够实现复数的加减运算吗?实现复数加减运算的方法 重载“+”、“-”运算符,运算符重载,6,运算符重载的实质,运算符重载是对已有的运算符赋予多重含义必要性C+中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类)实现机制将指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参。编译系统对重载运算符的选择,遵循函数重载的选择原则。,运算符重载,7,运算符重载,规则和限制,可以重载C+中除下列运算符外的所有运算符:. .* : ?:只能重载C+语言中已有的运算符,不可臆造新的。不改变原运算符的优先级和结
3、合性。不能改变操作数个数。经重载的运算符,其操作数中至少应该有一个是自定义类型。,8,两种形式,重载为类的非静态成员函数重载为非成员函数,运算符重载,9,运算符函数,声明形式函数类型 operator 运算符(形参) .重载为类成员函数时 参数个数=原操作数个数-1(后置+、-除外)重载为非成员函数时 参数个数=原操作数个数,且至少应该有一个自定义类型的形参。,运算符重载,10,运算符成员函数的设计,双目运算符 B如果要重载 B 为类成员函数,使之能够实现表达式 oprd1 B oprd2,其中 oprd1 为A 类对象,则 B 应被重载为 A 类的成员函数,形参类型应该是 oprd2 所属的
4、类型。经重载后,表达式 oprd1 B oprd2 相当于 oprd1.operator B(oprd2),运算符重载,11,运算符重载,例 8-1,将“+”、“-”运算重载为复数类的成员函数。 规则:实部和虚部分别相加减。 操作数:两个操作数都是复数类的对象。,#include using namespace std;class Complex /复数类定义public:/外部接口Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) /构造函数Complex operator + (const Complex ,12,Compl
5、ex Complex:operator + (const Complex /创建一个临时无名对象作为返回值,13,void Complex:display() const cout ( real , imag ) endl;int main() /主函数Complex c1(5, 4), c2(2, 10), c3;/定义复数类的对象cout c1 = ; c1.display();cout c2 = ; c2.display();c3 = c1 - c2;/使用重载运算符完成复数减法cout c3 = c1 - c2 = ; c3.display();c3 = c1 + c2;/使用重载运算
6、符完成复数加法cout c3 = c1 + c2 = ; c3.display();return 0;,14,程序输出的结果为:c1 = (5, 4)c2 = (2, 10)c3 = c1 - c2 = (3, -6)c3 = c1 + c2 = (7, 14),15,16,运算符成员函数的设计,前置单目运算符 U如果要重载 U 为类成员函数,使之能够实现表达式 U oprd,其中 oprd 为A类对象,则 U 应被重载为 A 类的成员函数,无形参。经重载后,表达式 U oprd 相当于 oprd.operator U(),运算符重载,17,运算符成员函数的设计,后置单目运算符 +和-如果要重
7、载 +或-为类成员函数,使之能够实现表达式 oprd+ 或 oprd- ,其中 oprd 为A类对象,则 +或- 应被重载为 A 类的成员函数,且具有一个 int 类型形参。经重载后,表达式 oprd+ 相当于 oprd.operator +(0),运算符重载,18,例8-2,运算符前置+和后置+重载为时钟类的成员函数。前置单目运算符,重载函数没有形参,对于后置单目运算符,重载函数需要有一个整型形参。操作数是时钟类的对象。实现时间增加1秒钟。,运算符重载,#include using namespace std;class Clock /时钟类声明定义public:/外部接口Clock(int
8、 hour = 0, int minute = 0, int second = 0);void showTime() const;Clock,19,/前置单目运算符重载函数Clock ,20,/后置单目运算符重载Clock Clock:operator + (int) /注意形参表中的整型参数Clock old = *this;+(*this);/调用前置“+”运算符return old;,21,/其它成员函数的实现略int main() Clock myClock(23, 59, 59);cout First time output: ;myClock.showTime();cout Sho
9、w myClock+: ;(myClock+).showTime();cout Show +myClock: ;(+myClock).showTime();return 0;,22,程序运行结果为:First time output: 23:59:59Show myClock+: 23:59:59Show +myClock: 0:0:1,23,24,运算符非成员函数的设计,函数的形参代表依自左至右次序排列的各操作数。后置单目运算符 +和-的重载函数,形参列表中要增加一个int,但不必写形参名。如果在运算符的重载函数中需要操作某类对象的私有成员,可以将此函数声明为该类的友元。,运算符重载,25,
10、运算符非成员函数的设计,双目运算符 B重载后,表达式oprd1 B oprd2 等同于operator B(oprd1,oprd2 )前置单目运算符 B重载后,表达式 B oprd 等同于operator B(oprd )后置单目运算符 +和-重载后,表达式 oprd B 等同于operator B(oprd,0 ),运算符重载,26,例8-3,将+、-(双目)重载为非成员函数,并将其声明为复数类的友元,两个操作数都是复数类的常引用。将(双目)重载为非成员函数,并将其声明为复数类的友元,它的左操作数是std:ostream引用,右操作数为复数类的常引用,返回std:ostream引用,用以支持
11、下面形式的输出:cout a b;该输出调用的是:operator (operator (cout, a), b);,运算符重载,#include using namespace std;class Complex /复数类定义public:/外部接口Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) /构造函数friend Complex operator + (const Complex ,27,Complex operator + (const Complex ,28,29,静态绑定与动态绑定,绑定程序自身彼此关联的过程,
12、确定程序中的操作调用与执行该操作的代码间的关系。静态绑定绑定过程出现在编译阶段,用对象名或者类名来限定要调用的函数。动态绑定绑定过程工作在程序运行时执行,在程序运行时才确定将要调用的函数。,#includeusing namespace std;class Point public:Point(double x, double y) : x(x), y(y) double area() const return 0.0; private:double x, y;class Rectangle: public Point public:Rectangle(double x, double y,
13、double w, double h);double area() const return w * h; private:double w, h;,静态绑定例,30,Rectangle:Rectangle(double x, double y, double w, double h) :Point(x, y), w(w), h(h) void fun(const Point 运行结果:Area = 0,31,#includeusing namespace std;class Point public:Point(double x, double y) : x(x), y(y) virtual
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 语言程序设计 清华大学 ppt 课件
链接地址:https://www.31ppt.com/p-1375502.html