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

关于c++对象模型

时间:2018-10-27 23:33:37      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:代码   include   模型   alt   http   静态成员函数   namespace   数列   如何   

  在学习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   

   

关于c++对象模型

标签:代码   include   模型   alt   http   静态成员函数   namespace   数列   如何   

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

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