C++ - 虚函数(virtual function) 的 使用范围

来源:互联网 发布:qsv转换mp4软件 编辑:程序博客网 时间:2024/06/05 10:33

虚函数(virtual function) 的 使用范围

 

本文地址: http://blog.csdn.net/caroline_wendy/article/details/15982647 

 

虚函数(virtual function) 在 基函数(base function) 和 派生函数(derived function) 之间可以覆写(override);

如果派生函数有与虚函数同名的函数, 则会隐藏虚函数, 但是虚函数还会在;

由于派生对象和基对象可以转换, 可以只使用基对象部分; 派生对象的虚函数会覆写基对象的虚函数;

 

代码:

/* * cppprimer.cpp * *  Created on: 2013.11.13 *      Author: Caroline *//*eclipse cdt, gcc 4.7.1*/#include <iostream>class Base {public:virtual int fcn () { //虚函数std::cout << "This base class [int fcn()]. " << std::endl;return 0;}};class D1 : public Base {public:int fcn (int) { //与基类的参数不同, 不是重载虚函数std::cout << "This derived 1 class [int fcn(int)]. " << std::endl;return 0;}virtual void f2 () { //虚函数std::cout << "This derived 1 class [f2()]. " << std::endl;}};class D2 : public D1 {public:int fcn (int) { //隐藏基函数的同名函数std::cout << "This derived 2 class [int fcn(int)]. " << std::endl;return 0;}int fcn () { //重载基类的虚函数std::cout << "This derived 2 class [int fcn()]. " << std::endl;return 0;}void f2 () {std::cout << "This derived 2 class [f2()]. " << std::endl;}};int main (void) {Base bobj;D1 d1obj;D2 d2obj;Base *bp1 = &bobj, *bp2 = &d1obj, *bp3 = &d2obj;bp1->fcn();bp2->fcn(); //未找到重载版本, 则使用基函数版本bp3->fcn(); //D2使用的是重载版本D1 *d1p = &d1obj;D2 *d2p = &d2obj;d1p->f2();d2p->f2();D1 *p1 = &d2obj;D2 *p2 = &d2obj;p1->fcn(10);p2->fcn(10);return 0;}


 

输出:

This base class [int fcn()]. This base class [int fcn()]. This derived 2 class [int fcn()]. This derived 1 class [f2()]. This derived 2 class [f2()]. This derived 1 class [int fcn(int)]. This derived 2 class [int fcn(int)].