第5章多态性与虚函数详解.ppt
文本预览下载声明
第5章 多态性与虚函数
5.1 多态性概述
5.2 运算符重载
5.3 虚函数
5.4 纯虚函数和抽象类;在OOP中:
窗口对象 行为3
移动
同一消息 棋子对象 行为4; 在C++中,多态的实现和联编这一概念有关。所谓联编就是把函数名与函数体的程序代码连接(联系)在一起的过程。
静态联编
联编
动态联编
静态联编就是在编译阶段完成的联编。静态联编函数调用速度很快。效率高, 但缺乏灵活性;
动态联编是运行阶段完成的联编。动态联编在运行时才能确定调用哪个函数,它降低了程序的运行效率,但增强了程序的灵活性。
C++实际上是采用了静态联编和动态联编相结合的联编方法。 ; 编译时的多态性
多态性
运行时的多态性
编译时的多态是通过静态联编来实现的。
运行时的多态是通过动态联编实现的。
在C++中:
编译时多态性主要是通过函数重载和运算符重载实现的。
运行时多态性主要是通过虚函数来实现的。
;问题举例——复数的运算;问题举例——复数的运算;运算符重载的实质;规则和限制;两种形式;运算符函数;运算符成员函数的设计; 例;5-1.cpp
#includeiostream
class complex //复数类声明
{
public: //外部接口
complex(double r=0.0,double i=0.0){real=r;imag=i;} //构造函数
complex operator + (complex c2); //+重载为成员函数
complex operator - (complex c2); //-重载为成员函数
void display(); //输出复数
private: //私有数据成员
double real; //复数实部
double imag; //复数虚部
}; ;complex complex::operator +(complex c2) //重载函数实现
{
complex c;
c.real=c2.real+real;
c.imag=c2.imag+imag;
return complex(c.real,c.imag);
};complex complex::operator -(complex c2) //重载函数实现
{
complex c;
c.real=real-c2.real;
c.imag=imag-c2.imag;
return complex(c.real,c.imag);
};void complex::display()
{ cout(real,imag)endl; }
int main() //主函数
{ complex c1(5,4),c2(2,10),c3; //声明复数类的对象
coutc1=; c1.display();
coutc2=; c2.display();
c3=c1-c2; //使用重载运算符完成复数减法
coutc3=c1-c2=;
c3.display();
c3=c1+c2; //使用重载运算符完成复数加法
coutc3=c1+c2=;
c3.display();
};程序输出的结果为:
;运算符成员函数的设计;后置单目运算符 ++和--
如果要重载 ++或--为类成员函数,使之能够实现表达式 oprd++ 或 oprd-- ,其中 oprd 为A类对象,则 ++或-- 应被重载为 A 类的成员函数,且具有一个 int 类型形参。
经重载后,表达式 oprd++ 相当于 oprd.operator ++(0);例;//5-2.cpp
#includeiostream
class Clock //时钟类声明
{
public: //外部接口
Clock(int NewH=0, int NewM=0, int NewS=0);
void ShowTime();
Clock operator ++(); //前置单目运算符重载
Clock operator ++(int); //后置单目运算符重载
private: //私
显示全部