- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第6章 多态性与虚函的数
第6章 多态性与虚函数;;学习目标: ;*;多态性的实现方法;静态多态性和动态多态性;静态多态性 ;#includeiostream
using namespace std;
class point{
int x,y;
public:
point();
point(int x,int y);
point(int i);
};
point::point()
{
x=0;
y=0;
}
; 动态关联:在运行时才决定运行哪个函数。
优点:灵活,层次高,技巧性高;
缺点:效率低;但由于现在计算机速度很快,所以一般不再考虑其运行效率问题。;;基类与派生类的转换;(1) 用派生类对象给基类对象赋值;(2) 可以用派生类对象来初始化基类的引用;(3) 如果函数的参数是基类对象或基类对象的引用,相应的实参可以用派生类对象。
(4) 可以把派生类对象的地址赋值给指向基
类的指针变量。
;;(1) 声明基类Point类
;(2) 声明派生类Circle
;int main( )
{Circle c(3.5,6.4,5.2);
coutoriginal circle:\nx=c.getX(), y=c.getY(), r=c.getRadius( )
, area=c.area( )endl;
c.setRadius(7.5);
c.setPoint(5,5);
coutnew circle:\\nc;
Point pRef=c;
coutpRef:pRef;
return 0;
}
;(3) 声明Circle的派生类Cylinder;int main( )
{Cylinder cy1(3.5,6.4,5.2,10);
cout\noriginal cylinder:\nx=cy1.getX( ), y=cy1.getY( ), r=
cy1.getRadius( ), h=cy1.getHeight( )\narea=cy1.area()
,volume=cy1.volume()endl;
cy1.setHeight(15);
cy1.setRadius(7.5);
cy1.setPoint(5,5);
cout\nnew cylinder:\ncy1;
Point pRef=cy1;
cout\npRef as a Point:pRef;
Circle cRef=cy1;
cout\ncRef as a Circle:cRef;
return 0;
}
;【总结】在程序中不是通过不同的对象名去调用不同派生层次中的同名函数,而是通过指针调用它们。确定调用哪个函数是在编译时确定的。
思考引出多态性:
【思考】如果 main ( ) 函数中的语句可以随着指针 p 所指对象不同而调用不同版本的area ( )函数,就实现了运行时的多态。这种机制的实现依赖于在在基类中把成员函数area ( )说明为虚函数。
;6.3 虚函数;例6.2 基类与派生类中有同名函数。;class Graduate:public Student
{public:
Graduate(int, string, float, float);
void display( );
private:
float pay;
};
void Graduate::display( ) {coutnum:num\nname:name\nscore:score\npay=payendl;}
Graduate::Graduate(int n, string nam,float s,float p):Student(n,nam,s),pay(p){ };;1. 虚函数的定义
定义虚函数的方法如下:
virtual 函数类型 函数名(形参表)
{// 函数体}
2.虚函数的作用
虚函数同派生类的结合可使C++支持运行时的多态性,
实现了在基类定义派生类所拥有的通用接口,而在派生
类定义具体的实现方法,即常说的“同一接口,多种
文档评论(0)