- 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.15】虚函数与重载函数的关系 #include iostream.h class base{ public: virtual void f1(){coutf1 of base;} virtual void f2(){coutf2 of base;} virtual void f3(){coutf3 of base;} void f4(){coutf4 of baseendl;} }; class derive : public base{ void f1(){coutf1 of derive;} void f2(int x) {coutf2 of derive;} int f3(){cout“f3 of derive”endl;} void f4() //一般的重载函数 {coutf4 of derive“endl;} }; void main() { base obj1,*ptr; derive obj2; ptr=obj1; ptr-f1(); ptr-f2(); ptr-f3(); ptr=obj2; ptr-f1(); ptr-f2(); ptr-f4(); } 3.虚函数的使用 定义一个基类类型的对象指针或引用,便可使其在需要时指向相应的类对象,并用此指针或引用去引用该对象所对应的类中已被“虚拟化”的函数,从而可以实现真正的运行时的多态性 【例6.16】虚函数的使用举例 #include iostream.h class A{ public: A(){coutclass A constructor; f();} virtual void f() {coutA::f();} void g() {coutA::g()endl;} void h() {coutA::h()endl; f(); g(); } }; class B : public A{ public: void f(){coutB::f()endl;} void g(){coutB::g()endl;} }; void main(){ A a; B b; A *p=b; p-f(); p-g(); p-h(); ?a.f(); a.g(); a.h(); b.f(); b.g(); b.h(); } 4.在构造函数和析构函数中调用虚函数 在构造函数和析构函数中调用虚函数时,采用静态联编,即它们所调用的虚函数是自己的类或基类中定义的函数,而不是在任何派生类中重定义的函数。同样,使用对象调用虚函数也采用静态联编 析构函数和构造函数情况一样,即析构函数所调用的虚函数是自己类中或基类中定义的虚函数。这是因为,在对象撤销时,该对象所包含的在派生类中定义的成员先于基类子对象撤销 【例6.18】在构造函数中调用虚函数 #include iostream.h class base{ public: base(){} virtual void vf() {coutbase::vf() called;} }; class son : public base{ public: son(){vf();} void g(){vf();} }; class grandson : public son{ public: grandson(){} void vf() {coutgrandson::vf() called;} }; void main() { grandson gs; gs.g(); } 5.空的虚函数 派生类并不一定必须实现基类中的虚函数。如果派生类想通过虚函数机制访问虚函数,则必须建立一条从基类到派生类的虚函数路径。许多没有使用虚函数的中间类也必须声明该函数,以保证其后的派生类能使用该虚函数。可以通过声明空函数来达到此目的 【例6.19】空虚函数 #include iostream.h class base{ public: virtual void print() {coutclass base!\n;} }; class son : public base{ public: virtual void print(){} }; class grandson : public son{ public: virtual void print()
原创力文档


文档评论(0)