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 }

执行结果如下
C++虚函数使用的例子C++虚函数使用的例子

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

View Code

原文链接: https://www.cnblogs.com/xiaol-luo/archive/2013/05/15/3079618.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/88564

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午11:42
下一篇 2023年2月9日 下午11:42

相关推荐