虚函数(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; } }; /*更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/*/ 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)].
作者:csdn博客 Spike_King
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
, 对象
, 函数
, 虚函数
, function
, override
, virtual
, 多态与虚函数
C++虚函数
virtual 虚函数、virtual function、virtual function c、虚函数的使用、虚函数使用,以便于您获取更多的相关知识。
时间: 2024-11-03 10:01:11