1,声明与定义。

//声明式如下:

extern int x;   //对象式(变量式)声明

std::size_t numDigits(int number);  //函数式声明

class Widget;    //类声明

template<typename T>    //模板类声明

class GraphNode;

//定义式如下:

int x;    //对象的定义

std::size_t numDigits(int number)    //函数的定义

{

  ...

}

class Widget               //类的定义

{

  ...

};

template<typename T>            //模板类的定义

class GraphNode

{

  ...

};

声明式,其实就是让编译器知道名称和类型。这样编译的时候就能够通过。

定义式,其实就是让编译器知道细节。这样在链接器连接的时候就能够找到对应的代码。

2,结构、类等都是程序员自定义类型,相比于int,它是自定义类型,而int是内置类型。所以他们都是类型。只有定义该类型的变量才会分配内存。

3,对于c++的类,类的对象存储的是类中描述的数据成员。这些数据成员可能是自己类中声明的,也可能是父类继承而来的。但类的对象中并没有存储成员函数。成员函数其实是所有对象共用的。调用的时候,会隐藏一个this指针传入成员函数用以区分是哪个对象调用了成员函数。

4,一个程序的设计可以有非常多种:面向对象还是面向过程。如果是面向对象的话,是通过继承类实现代码重用还是不通过继承。是否需要虚继承、是否需要虚函数、是否需要支持模板等等,还可以考虑使用宏来实现,速度比函数调用还要快。

5,c++的虚函数和虚基类会有内存上的开销。可以反思虚函数表。

6,类的数据成员有两种类型:静态数据成员和非静态数据成员。类的成员函数有三种类型:静态成员函数、非静态成员函数、虚函数

7,

8,真正的c++对象模型:

从图中可以看出,非静态数据成员以及一个虚表指针被包含在对象中。静态成员函数、非静态成员函数、静态数据成员都被放在对象外面。虚函数的地址则放在虚表中。

9,

指针的类型转换,不改变指针本身的值(是一个地址),而是改变编译器解释这个地址所指向的内存的方式。

10,

深度探索c++对象模型 第一章的更多相关文章

  1. 深度探索c++对象模型 第二章

    1,c++转换函数:显示转换和隐式转换. 隐式转换为程序员提供了很大的变量.比如整形提升,普通类型转换为类类型(operator int())都为程序带来无尽的方便.试想,如果没有整形提升,一个sho ...

  2. Android深度探索-卷1第一章心得体会

     本章介绍了安卓系统移植与驱动开发的概述,安卓的系统架构有四层:1 Linux内核,2 c/c++代码库, 3 Android SDK API, 4 应用程序 在读的过程中看到了专业名词,查了查,长点 ...

  3. 拾遗与填坑《深度探索C++对象模型》3.3节

    <深度探索C++对象模型>是一本好书,该书作者也是<C++ Primer>的作者,一位绝对的C++大师.诚然该书中也有多多少少的错误一直为人所诟病,但这仍然不妨碍称其为一本好书 ...

  4. 拾遗与填坑《深度探索C++对象模型》3.2节

    <深度探索C++对象模型>是一本好书,该书作者也是<C++ Primer>的作者,一位绝对的C++大师.诚然该书中也有多多少少的错误一直为人所诟病,但这仍然不妨碍称其为一本好书 ...

  5. 《深度探索C++对象模型》读书笔记(一)

    前言 今年中下旬就要找工作了,我计划从现在就开始准备一些面试中会问到的基础知识,包括C++.操作系统.计算机网络.算法和数据结构等.C++就先从这本<深度探索C++对象模型>开始.不同于& ...

  6. 深度探索C++对象模型

    深度探索C++对象模型 什么是C++对象模型: 语言中直接支持面向对象程序设计的部分. 对于各个支持的底层实现机制. 抽象性与实际性之间找出平衡点, 需要知识, 经验以及许多思考. 导读 这本书是C+ ...

  7. c++学习书籍推荐《深度探索C++对象模型》下载

    百度云及其他网盘下载地址:点我 百度云及其他网盘下载地址:点我 编辑推荐 如果你是一位C++程序员,渴望对于底层知识获得一个完整的了解,那么这本<深度探索C++对象模型>正适合你 作者简介 ...

  8. 读书笔记《深度探索c++对象模型》 概述

    <深度探索c++对象模型>这本书是我工作一段时间后想更深入了解C++的底层实现知识,如内存布局.模型.内存大小.继承.虚函数表等而阅读的:此外在很多面试或者工作中,对底层的知识的足够了解也 ...

  9. 柔性数组-读《深度探索C++对象模型》有感 (转载)

    最近在看<深度探索C++对象模型>,对于Struct的用法中,发现有一些地方值得我们借鉴的地方,特此和大家分享一下,此间内容包含了网上搜集的一些资料,同时感谢提供这些信息的作者. 原文如下 ...

随机推荐

  1. AABB边框、OBB边框、通过比较球包围

    1) AABB 包围盒: AABB 包围盒是与坐标轴对齐的包围盒, 简单性好, 紧密性较差(尤其对斜对角方向放置的瘦长形对象, 採用AABB, 将留下非常大的边角空隙, 导致大量不是必需的包围盒相交測 ...

  2. WPF 图片灰度处理

    原文:WPF 图片灰度处理 文章的内容是来自微软中文技术论坛的一个帖子,当时是想将一段将图片灰度处理的代码转换为XAML的一个样式,在这里要谢谢 Xiao Yan Qiang.Sheldon _Xia ...

  3. 特殊存储过程——触发器Trigger

    触发器类型 insert 触发器delete 触发器update 触发器 Inserted和Deleted两个临时表的作用 Inserted:对于插入记录操作来说,插入表里存放的是要插入的数据:对于更 ...

  4. WPF中的文字修饰——上划线,中划线,基线与下划线

    原文:WPF中的文字修饰——上划线,中划线,基线与下划线 我们知道,文字的修饰包括:空心字.立体字.划线字.阴影字.加粗.倾斜等.这里只说划线字的修饰方式,按划线的位置,我们可将之分为:上划线.中划线 ...

  5. jquery表单过滤器

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  6. String 源码分析

    Java 源码阅读 - String String 类型看起来简单,实际上背后的复杂性基本可以涵盖了整个 Java 设计,涉及到设计模式(不可变对象).缓存(String Pool 的理念).JVM( ...

  7. linux 修改 ssh 的端口号,启动hg服务

    修改 ssh 的端口号 # vim /etc/ssh/sshd_config  将其中的 Port 改为 想要修改的端口号. # service sshd restart   启动hg服务 # hg ...

  8. WPF 用代码调用dynamic resource动态更改背景 - CSDN博客

    原文:WPF 用代码调用dynamic resource动态更改背景 - CSDN博客 一般dynamic resoource通常在XAML里调用,如下范例: <Button Click=&qu ...

  9. delphi dom动态创建节点方法

    在一次测试demo中 需要动态的创建xml节点并添加,实现方法如下: var NewItem:IXMLDOMElement; NewItem:=ConfigDoc.createElement('ite ...

  10. 图像滤镜艺术---Hudson滤镜(Instagram)

    原文:图像滤镜艺术---Hudson滤镜(Instagram)     今天给大家实现的是Instagram中的Hudson滤镜,为什么介绍Instagram滤镜,原因很简单,Instagram本身就 ...