常读常新C++Primer

项目开发日志(五)

由于工作上项目逻辑部分选择用C++实现,在业余时间重新去读了一次 C++Primer,我记得第一次读还是在大三暑假,1000多页的天书搞不懂那时候是怎么看完的.而工作后的这一次 我用了大概前前后后2个月的时间去看.基本也就一天翻20多页的状态.

我发现现在很多人很难静下心来把一本技术书或者一篇中等的文章从头读到尾,即使是我写的一些BUG记录博文,很多人遇到相应的问题还是懒得翻,躁动的网络干扰着躁动的心.需要赶快让自己读书的状态回归当年 .

这次读C++Primer的新认识

  • Object 不是 对象

对象 按照我们中文的理解 应该是和 你,我,他 同级的事物,例如我给你找对象,你去找对象,表达的应该都是和我方同等级的事物.但是Object 不应该理解为对象,我觉得这个翻译一开始就有问题,虽然现在大家也渐渐接受了.把 Object 理解为 部件,零件更准确一点.可以拿建房子这个事情做一次对比:

1.我通过各个对象去构建房子这个东西

2.我通过各个部件去构建房子这个东西

显然 部件 更精确.

  • 指针其实是地址

这一点是我在写汇编程序的时候认识到的,无论是32位的还是64位的机器 都会有一个东西叫做 寻址空间,所有的指针 其实都是地址 无论是 间接地址 还是 直接地址,指针的指针其实也是地址 只不过指向的是一个存放另一个地址数据的内存罢了.

  • 对象是内存,对象指针是指向这块内存的地址

理解这点很重要,举个例子:

基类BaseClass:

class BaseClass
{
public:
    virtual bool skip() = 0;
};

派生类TestClass:

class TestClass:public BaseClass
{
public:
    virtual bool skip();
    bool skip2();
};

按照上面的继承关系 我们进行如下赋值的话 会发生什么呢?

int Main()
{
    TestClass tObj;
    TestClass* pTObj;
    BaseClass bObj;
    BaseClass* pBObj;
    // 下面进行赋值操作
    pBObj = pTObj;
    bObj = tObj
}

pBObj 被派生类指针赋值,在运行的时候,会绑定到派生类.由于指针是地址 指向的内存不会改变.

bObj 声明为基类,虽然用派生类对象赋值,但是由于对象是内存 所以会把派生类的部分减掉.

所以在使用C++动态绑定特性的时候千万要注意 对象 和 指针的区别.

发表评论

邮箱地址不会被公开。 必填项已用*标注