欢迎来到天天文库
浏览记录
ID:50065702
大小:213.00 KB
页数:27页
时间:2020-03-08
《程序设计基础——C++ 教学课件 作者 刘玉英 第9讲多态性与虚函数.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、9.1多态性概述9.2运算符重载9.2.1重载为成员函数9.2.2重载为友元函数第9讲多态性与虚函数9.3虚函数9.4纯虚函数与抽象类9.5编程实例—日期类多态性是指不同的对象接受到相同的消息时产生不同的响应动作,例如对应相同的函数名,却执行了不同的函数体。9.1多态性概述多态性与前面介绍的继承、封装等一样,都是面向对象程序设计语言中的重要特征。一般来说,C++语言支持两种不同类型的多态:编译时多态和运行时多态。编译时多态主要通过函数重载和运算符重载实现,运行时多态主要通过虚函数来实现。运算符重载是对已有的运算符赋予多重含义,
2、使同一个运算符作用于不同类型的数据导致不同类型的行为。其主要优点在于用户自定义的数据类型可使用编译系统预定义的运算符。定义运算符重载函数的函数名字必须以operator开头。9.2运算符重载运算符重载是通过函数来实现的,而且运算符重载函数应能访问类的私有成员,所以,运算符重载函数有两种形式:成员函数友元函数#includeclassComplex//复数类声明{private:doublerealpart,imagpart;public:Complex(){realpart=0.0;imagpart=0
3、.0;}//构造函数Complex(doublec){realpart=c;imagpart=0;}Complex(doubler1,doublei1){realpart=r1;imagpart=i1;}doublereal(){returnrealpart;}//取复数的实部和虚部doubleimag(){returnimagpart;}Complexoperator+(Complexc)//算术运算符重载为成员函数{returnComplex(realpart+c.realpart,imagpart+c.imagpart)
4、;}voidDisplay(){cout<5、(后置++、--除外)重载为友元函数时参数个数=原操作数个数,且至少应该有一个自定义类型的形参。(1)虽然运算符重载可以改变运算符原来的行为,但是它并不能改变运算符的优先级、结合性、操作数的个数。也不能创建新的运算符,只能重载现有的运算符。运算符重载具有非常强的灵活性。在应用时要注意以下几点问题:(3)在重载运算符()、[]、->或者=时,运算符重载函数必须声明为类的成员函数。对于其他的运算符,运算符重载函数可以是成员函数或者友元函数。(2)运算符重载函数的参数至少有一个必须是自定义类型。运算符可重载+-*/%^&6、~!=<>7、+=-=*=/=%=^=&=8、=<<>>>>=<<===!=<=>=&&9、10、++--->,->[]()newdelete.*::?:sizeof不可重载表9.1可以重载和不可重载的运算符9.2.1运算符重载为成员函数案例6.2classClock//时钟类声明{public:Clock(intNewH=0,intNewM=0,intNewS=0)//构造函数{Hour=NewH;Minute=NewM;Second=NewS;}voidShowTime(){cout<11、d<<“秒";}voidoperator++();//前置单目运算符重载voidoperator++(int);//后置单目运算符重载private:intHour,Minute,Second;};voidClock::operator++()//前置单目运算符重载{Second++;if(Second>=60){Second=Second-60;Minute++;if(Minute>=60){Minute=Minute-60;Hour++;Hour=Hour%24;}}cout<<"++Clock:";}运算符前置++和12、后置++重载为时钟类的成员函数:操作数是时钟类的对象。实现时间增加1秒。voidClock::operator++(int)//后置单目运算符重载{Second++;if(Second>=60){Second=Second-60;Minute++;if(Minute>=60)
5、(后置++、--除外)重载为友元函数时参数个数=原操作数个数,且至少应该有一个自定义类型的形参。(1)虽然运算符重载可以改变运算符原来的行为,但是它并不能改变运算符的优先级、结合性、操作数的个数。也不能创建新的运算符,只能重载现有的运算符。运算符重载具有非常强的灵活性。在应用时要注意以下几点问题:(3)在重载运算符()、[]、->或者=时,运算符重载函数必须声明为类的成员函数。对于其他的运算符,运算符重载函数可以是成员函数或者友元函数。(2)运算符重载函数的参数至少有一个必须是自定义类型。运算符可重载+-*/%^&
6、~!=<>
7、+=-=*=/=%=^=&=
8、=<<>>>>=<<===!=<=>=&&
9、
10、++--->,->[]()newdelete.*::?:sizeof不可重载表9.1可以重载和不可重载的运算符9.2.1运算符重载为成员函数案例6.2classClock//时钟类声明{public:Clock(intNewH=0,intNewM=0,intNewS=0)//构造函数{Hour=NewH;Minute=NewM;Second=NewS;}voidShowTime(){cout<11、d<<“秒";}voidoperator++();//前置单目运算符重载voidoperator++(int);//后置单目运算符重载private:intHour,Minute,Second;};voidClock::operator++()//前置单目运算符重载{Second++;if(Second>=60){Second=Second-60;Minute++;if(Minute>=60){Minute=Minute-60;Hour++;Hour=Hour%24;}}cout<<"++Clock:";}运算符前置++和12、后置++重载为时钟类的成员函数:操作数是时钟类的对象。实现时间增加1秒。voidClock::operator++(int)//后置单目运算符重载{Second++;if(Second>=60){Second=Second-60;Minute++;if(Minute>=60)
11、d<<“秒";}voidoperator++();//前置单目运算符重载voidoperator++(int);//后置单目运算符重载private:intHour,Minute,Second;};voidClock::operator++()//前置单目运算符重载{Second++;if(Second>=60){Second=Second-60;Minute++;if(Minute>=60){Minute=Minute-60;Hour++;Hour=Hour%24;}}cout<<"++Clock:";}运算符前置++和
12、后置++重载为时钟类的成员函数:操作数是时钟类的对象。实现时间增加1秒。voidClock::operator++(int)//后置单目运算符重载{Second++;if(Second>=60){Second=Second-60;Minute++;if(Minute>=60)
此文档下载收益归作者所有