码迷,mamicode.com
首页 > 其他好文 > 详细

(原+转)继承与虚函数

时间:2015-03-31 10:37:53      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:

参考网址:

http://blog.csdn.net/hackbuteer1/article/details/7475622

http://blog.csdn.net/j123kaishichufa/article/details/9841261

如下代码:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 class A
 5 {
 6 public:
 7     void foo()
 8     {
 9         printf("1\n");
10     }
11     virtual void fun()
12     {
13         printf("2\n");
14     }
15 };
16 class B : public A
17 {
18 public:
19     void foo()
20     {
21         printf("3\n");
22     }
23     void fun()
24     {
25         printf("4\n");
26     }
27 };
28 
29 int _tmain(int argc, _TCHAR* argv[])
30 {
31     A a;
32     B b;
33 
34     A *p = &a;
35     p->foo();
36     p->fun();
37     p = &b;
38     p->foo();
39     p->fun();
40 
41     B *ptr = (B *)&a;
42     ptr->foo();
43     ptr->fun();
44 
45     return 0;
46 }

在VS2013上结果如下:

1
2
1
4
3
2

解释:

   在继承层次中,存在向上指针类型转换或者向下类型转换,则调用成员函数(两个类都实现了)调用的是哪个类的函数,遵循下面2个规则:

1)调用虚函数时,因为是动态绑定,所以根据指针指向的对象的实际类型来决定。

2)调用非虚函数,静态决定,所以根据表面山看到的类的类型来决定。

(原+转)继承与虚函数

标签:

原文地址:http://www.cnblogs.com/darkknightzh/p/4380108.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!