欢迎来到天天文库
浏览记录
ID:36322135
大小:431.81 KB
页数:56页
时间:2019-05-09
《c程序设计--对象分册(第3章)潘修改》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第3章多态性本章学习重点掌握内容:多态的概念和作用,多态的实现方法常见运算符的重载静态联编和动态联编虚函数、纯虚函数和抽象基类的概念和用法虚析构函数的概念和作用,虚析构函数的用法1第3章多态性3.1多态性的概念3.2运算符重载3.3联编和虚函数3.4纯虚函数和抽象类3.5综合应用实例23.1多态性的概念多态性(Polymorphism)是面向对象程序设计的重要特性之一,它与封装性和继承性一起构成了面向对象程序设计的三大特性。多态性是指当不同的对象收到相同的消息时,产生不同的动作。利用多态性可以设计和实现一个易于
2、扩展的系统。在面向对象程序设计里多态性主要体现在:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。C++支持两种形式的多态性,一种是编译时的多态性,称为静态联编。33.2.1运算符重载概述在以前的学习中,C++中预定义的运算符的操作对象只能是基本数据类型如int或float等。实际上,对于很多用户自定义的类型(如类),也需要有类似的运算操作。例如复数类Complex。classComplex{public:Complex(){real
3、=image=0;}Complex(doubler,doublei){real=r,image=i;}voidPrint();private:doublereal,image;};43.2.1运算符重载概述voidComplex::Print(){if(image<0)cout<4、c1+c2”,编译时却会出错,这是因为编译器不知道该如何完成这个加法。这时我们就需要编写程序来实现“+”运算符来作用于complex类的对象,这就是运算符的重载。运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时,导致不同类型的行为。53.2.1运算符重载概述C++中运算符的重载虽然给我们设计程序带来很多的方便,但对运算符的重载时,以下的几种情况需要注意:(1)一般来说,不改变运算符原有含义,只让它能针对新类型数据的实际需要,对原有运算符进行适当的改造。例如,重载“+”运算符后,它的功5、能还是进行加法运算。(2)重载运算符时,不能改变运算符原有的优先级别,也不能改变运算符需要的操作数的数目。重载之后运算符的优先级和结合性都不会改变。(3)不能创建新的运算符,只能重载c++中已有的运算符。(4)有些运算符不能进行重载。如:“.”类成员运算符、“*”类指向运算符、“::”类作用域运算符、“?:”条件运算符及“sizeof”求字节数运算符。(5)重载运算符只适用于用户自定义的类的对象之间(以及它们和基本数据类型之间)的运算,C++基本数据之间的运算符的含义不能通过重载改变。63.2.2双目运算符重载6、双目运算符就是运算符作用于两个操作数。下面通过一个例子对“+”运算符重载来学习一下双目运算符重载的应用。【例3.1】定义一个复数类,重载“+”运算符为复数类的成员函数,使这个运算符能直接完成两个复数的加法运算,以及一个复数与一个实数的加法运算。7C/C++程序设计教程--面向对象分册friendComplexoperator+(constComplex&c1,constComplex&c2);private:doublereal,image;};Complexoperator+(constComplex&c1,7、constComplex&c2){returnComplex(c1.real+c2.real,c1.image+c2.image);}intmain(){Complexc1(2.0,3.0),c2(4.0,-2.0),c3;c3=c1+c2;cout<<"c1+c2=";c3.print();Return0;}#includeusingnamespacestd;classComplex{public:Complex(doubler=0,doublei=0){real=r,image=i;}v8、oidprint(){if(image>0)cout<classComplex{public:Complex(doubler=
4、c1+c2”,编译时却会出错,这是因为编译器不知道该如何完成这个加法。这时我们就需要编写程序来实现“+”运算符来作用于complex类的对象,这就是运算符的重载。运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时,导致不同类型的行为。53.2.1运算符重载概述C++中运算符的重载虽然给我们设计程序带来很多的方便,但对运算符的重载时,以下的几种情况需要注意:(1)一般来说,不改变运算符原有含义,只让它能针对新类型数据的实际需要,对原有运算符进行适当的改造。例如,重载“+”运算符后,它的功
5、能还是进行加法运算。(2)重载运算符时,不能改变运算符原有的优先级别,也不能改变运算符需要的操作数的数目。重载之后运算符的优先级和结合性都不会改变。(3)不能创建新的运算符,只能重载c++中已有的运算符。(4)有些运算符不能进行重载。如:“.”类成员运算符、“*”类指向运算符、“::”类作用域运算符、“?:”条件运算符及“sizeof”求字节数运算符。(5)重载运算符只适用于用户自定义的类的对象之间(以及它们和基本数据类型之间)的运算,C++基本数据之间的运算符的含义不能通过重载改变。63.2.2双目运算符重载
6、双目运算符就是运算符作用于两个操作数。下面通过一个例子对“+”运算符重载来学习一下双目运算符重载的应用。【例3.1】定义一个复数类,重载“+”运算符为复数类的成员函数,使这个运算符能直接完成两个复数的加法运算,以及一个复数与一个实数的加法运算。7C/C++程序设计教程--面向对象分册friendComplexoperator+(constComplex&c1,constComplex&c2);private:doublereal,image;};Complexoperator+(constComplex&c1,
7、constComplex&c2){returnComplex(c1.real+c2.real,c1.image+c2.image);}intmain(){Complexc1(2.0,3.0),c2(4.0,-2.0),c3;c3=c1+c2;cout<<"c1+c2=";c3.print();Return0;}#includeusingnamespacestd;classComplex{public:Complex(doubler=0,doublei=0){real=r,image=i;}v
8、oidprint(){if(image>0)cout<classComplex{public:Complex(doubler=
此文档下载收益归作者所有