C++虚函数使用的例子
C++的虚函数是多态的基础, 关于它的常见规则,已经网上已经有很多文章描述过了。我在这里仅仅是写下几行代码,来展现各种情况,相信你大概能在这里找到你所困惑的情况。如果想系统的了解,到网络上寻找别人总结性的文章。
在linux下可以执行以下命令编译执行代码
g++ -g -o main main.cpp && ./main
demo源码:
1 #include <iostream> 2 using namespace std; 3 4 class base { 5 public: 6 virtual void virtualfun(){ 7 cout << "base::this is base virtual_fun " << endl; 8 } 9 10 void commonfun(){ 11 cout << "base::this is base common fun " << endl; 12 } 13 }; 14 15 class level1 : public base { 16 public: 17 void commonfun(); 18 virtual void virtualfun(); 19 }; 20 21 void 22 level1::virtualfun(){ 23 cout << " level1::this is level1 virtual_fun " << endl; 24 } 25 26 void 27 level1::commonfun(){ 28 cout << " level1::this is level1 common_fun " << endl; 29 } 30 31 32 int 33 main(int argc, char* argv[]) 34 { 35 level1 level1_1; 36 base base_1; 37 38 cout << endl; 39 cout << "### level1_1 ###" << endl; 40 level1_1.virtualfun(); 41 level1_1.commonfun(); 42 43 cout << endl; 44 cout << "### base_1 ###" << endl; 45 base_1.virtualfun(); 46 base_1.commonfun(); 47 48 base& ref_base_base = base_1; 49 base& ref_base_level1 = level1_1; 50 level1& ref_level1 = level1_1; 51 52 base* p_base = &base_1; 53 level1* p_level1 = &level1_1; 54 55 cout << endl; 56 cout << "### ref_base_base ### " << endl; 57 ref_base_base.virtualfun(); 58 ref_base_base.commonfun(); 59 60 cout << endl; 61 cout << "### ref_base_level1 ### notice this!!!" << endl; 62 ref_base_level1.virtualfun(); 63 ref_base_level1.commonfun(); 64 65 cout << endl; 66 cout << "### ref_level1 ### " << endl; 67 ref_level1.virtualfun(); 68 ref_level1.commonfun(); 69 70 cout << endl; 71 cout << "### p_level1 = &level1_1 ### " << endl; 72 p_level1->virtualfun(); 73 p_level1->commonfun(); 74 75 cout << endl; 76 cout << "### p_base = &base_1###" << endl; 77 p_base->virtualfun(); 78 p_base->commonfun(); 79 80 cout << endl; 81 cout << "### p_base = &level1_1 ### notice this!!" << endl; 82 p_base = &level1_1; 83 p_base->virtualfun(); 84 p_base->commonfun(); 85 86 cout << endl; 87 cout << "### (*p_base).virtualfun() && (*pbase).commonfun() ### " << endl; 88 89 (*p_base).virtualfun(); 90 (*p_base).commonfun(); 91 92 cout << endl; 93 cout << "### base_2 = (*p_base) ###" << endl; 94 base base_2 = (*p_base); 95 base_2.virtualfun(); 96 base_2.commonfun(); 97 98 }
执行结果如下
xiaol-luo@CentOS:~/link/net_codes/c++/virtual$ g++ -g -o main main.cpp && ./main ### level1_1 ### level1::this is level1 virtual_fun level1::this is level1 common_fun ### base_1 ### base::this is base virtual_fun base::this is base common fun ### ref_base_base ### base::this is base virtual_fun base::this is base common fun ### ref_base_level1 ### notice this!!! level1::this is level1 virtual_fun base::this is base common fun ### ref_level1 ### level1::this is level1 virtual_fun level1::this is level1 common_fun ### p_level1 = &level1_1 ### level1::this is level1 virtual_fun level1::this is level1 common_fun ### p_base = &base_1### base::this is base virtual_fun base::this is base common fun ### p_base = &level1_1 ### notice this!! level1::this is level1 virtual_fun base::this is base common fun ### (*p_base).virtualfun() && (*pbase).commonfun() ### level1::this is level1 virtual_fun base::this is base common fun ### base_2 = (*p_base) ### base::this is base virtual_fun base::this is base common fun

浙公网安备 33010602011771号