首页 > 其他 > 详细

(原+转)继承与虚函数

时间:2015-03-31 10:36:32      阅读:134      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!