关于c++对象模型

  在学习c++的时候,大部分教材与书籍都是在讲述c++的语法,或者说是在描述语言的一些特性。比如我们熟悉的抽象,封装,继承,多态。当然,这其中也包含了类与对象,多继承,虚继承,虚函数,纯虚函数等等一些具有语言特性的内容。大部分书籍在这方面的内容是比较全面的(大部分语言特性)。但是,对于类这种抽象数据类型在底层如何实现,大部分书籍只是科普性的介绍了一下。。。。。这样对于我们这些初学者来说,是很难受的一件事情。

  我们知道,c++是一门比较接近底层的高级语言。所以,它包含了一些比较复杂的东西(指针,应该是很复杂才对)。我们在使用指针的时候,还是需要了解,我们的指针都干了些什么,一提到指针,这就需要我们去了解底层(对象模型),否则代码就会出现我们始料未及的bug。了解了对象模型,也可以帮助我们理解一些令人费解的语法内容,比如静态绑定,动态绑定,多继承,虚继承,虚函数列表等等。据我了解到的内容来看,这些是比较费解的。

  在描述c++对象模型之前,先介绍一下,笔者是因为什么,才迫切的想去了解c++的对象模型。

  

#include <iostream>
#include <cstdlib>
using namespace std;

class Base
{
public:
    void fm() { cout << "Base " << endl; }
};

class Derive:public Base {
public:
    void fm() { cout << "Derive " << endl; }
};

int main()
{
    Base base;
    Base *pBase;
    Derive derive;
    pBase = (Derive *)&derive;
    derive.fm();
    pBase->fm();

    system("pause");
    return 0;
}

  这段代码会运行出什么结果呢?结果应该是Derive和Derive呢?比如这样

  还是一个令我们费解的内容呢?

  运行结果如图所示 相信这对于初学者来说应该是一个比较费解的内容。

  我们的pBase指向了一个Derive对象,却调用了自己的成员函数。实在是令人费解。

  还有关于虚函数列表的问题,以及静态数据成员,非静态数据成员,静态成员函数,虚成员函数,非虚非静态函数,这些最底层的东西在c++中如何实现。这都是一些教材一笔带过的内容。这些在李普曼大师的《深度探索C++对象模型》一书中都有所涉猎,笔者希望每一位学习C++的人都可以读一读这本书,相信你会有所收获。

  当然,我们也可以不了解关于对象指针的内容,但这样的话,我们在写代码时,就无法充分的发挥c++语言的威力。比如我们要使用多态的时候,必须使用指针或引用。这个时候,如果不了解一些底层的知识。往往会出现我们难以理解的bug   

   

原文地址:https://www.cnblogs.com/zhuxingtian/p/9863853.html