码迷,mamicode.com
首页 > 编程语言 > 详细

C++对象模型:单继承,多继承,虚继承

时间:2016-08-06 17:26:02      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

C++对象模型

有两个概念可以解释C++对象模型:

语言中直接支持面向对象程序设计的部分。
对于各种支持的底层实现机制。

单继承(父类含虚函数)

 1 #include <iostream>
 2 #include<vector>
 3 using namespace std;
 4 
 5 class Base
 6 {
 7 public:
 8     void fun1(){ cout << "Base fun1" << endl; }
 9     virtual void fun2(){ cout << "Base fun2" << endl; }
10 private:
11     int a;
12 };
13 
14 class Derive : public Base
15 {
16 public:
17     void fun1(){ cout << "Derive fun1" << endl; }
18     void fun2(){ cout << "Derive fun2" << endl; }
19 private:
20     int b;
21 };
22 
23 int main()
24 {
25     Base b;
26     Derive d;
27     Base *p = &d;
28     p->fun1();
29     p->fun2();
30 
31     system("pause");
32     return 0;
33 }

输出:基类指针p在运行时发生动态绑定,fun2调用子类方法,fun1由于没有virtual,仍然调用父类方法 

 技术分享

内存模型:

技术分享

指针的虚表指向子类方法地址

技术分享

当一个类本身定义了虚函数,或其父类有虚函数时,为了支持多态机制,编译器将为该类添加一个虚函数指针(vptr)。虚函数指针一般都放在对象内存布局的第一个位置上,这是为了保证在多层继承或多重继承的情况下能以最高效率取到虚函数表。

当vprt位于对象内存最前面时,对象的地址即为虚函数指针地址。

虚继承

C++对象模型:单继承,多继承,虚继承

标签:

原文地址:http://www.cnblogs.com/raichen/p/5744300.html

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