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 
View Code

  

posted @ 2013-05-15 12:53  秀逗小虫虫  阅读(172)  评论(0)    收藏  举报