第6节 多态性与虚函数.ppt

  1. 1、本文档共61页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DataBase类 Author,title,year Disp,构造函数 Painting类 Width,height Disp,构造函数 Music类 key Disp,构造函数 class DataBase { protected: char author[10];//作者 char title[20];//名字 int year;//年份 public: DataBase(char *author,char title[],int year) { strcpy(this-author,author); strcpy(this-title,title); this-year=year; } virtual void disp(); }; void DataBase::disp() { cout 作者:this-authorendl; cout 名字:this-titleendl; cout 年份:this-yearendl; } class Painting:public DataBase { private: int height,width; public: Painting(char *author,char *title,int year,int width,int height):DataBase(author,title,year) { this-height=height; this-width=width; } virtual void disp(); }; void Painting::disp() { DataBase::disp(); cout 类型:绘画endl; cout 尺寸:宽度=width,高度=this-heightendl; } class Music:public DataBase { protected: char key[10]; public: Music(char *author,char *title,int year,char *key):DataBase(author,title,year) { strcpy(this-key,key); } virtual void disp(); }; void Music::disp() { DataBase::disp(); cout 类型:音乐endl; cout 曲调:keyendl; } int main() { Music m(“贝多芬”,“命运交响曲.wav,1824,D小调); Painting p(达芬奇,蒙娜丽莎.jpg,1503,800,753); printdata(m); printdata(p); } 把上述程序补充完整,使得输出结果如图 函数重载和通过对象名调用的虚函数,在编译时 即可确定其调用的虚函数属于哪一个类,其过程 称为静态关联(static binding) 在运行阶段,基类指针变量先指向了某一个类对 象,然后通过此指针变量调用该对象中的函数。 在运行阶段把虚函数和类对象“绑定”在一起的,其 过程称为动态关联(dynamic binding) 6.3.3 在什么情况下应当声明虚函数 (1)只能用virtual声明类的成员函数,使它成为虚函数,而不能将类外的普通函数声明为虚函数。 (2) 一个成员函数被声明为虚函数后,在同一类族中的类就不能再定义一个非virtual的但与该虚函数具有相同的参数(包括个数和类型)和函数返回值类型的同名函数。 (3) 有时,在定义虚函数时,并不定义其函数体,即函数体是空的。 6.3.4 虚析构函数 例6.3 基类中有非虚析构函数时的执行情况。 #include iostream using namespace std; class Point {public: Point( ){ } ~Point(){coutexecuting Point destructorendl;} }; virtual class Circle:public Point {public: Circle( ){ } ~Circle( ){coutexecuting Circle destructorendl;} private: int radius; }; int main( ) { Point *p=new Circle; delete p; return 0;} executing Point

文档评论(0)

187****5045 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档