文档详情

第5章多态性与虚函数详解.ppt

发布:2017-04-16约字共80页下载文档
文本预览下载声明
第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: //私
显示全部
相似文档