深度探索c++对象模型 第一章

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,

时间: 2024-10-20 12:26:19

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

深度探索C++对象模型 第二章构造函数语意学

在使用C++时,常常会好奇或者抱怨,编译器为我们做了什么事呢? 为什么构造函数没有为我初始化呢?为什么我还要写默认构造函数呢? 2.1 Default Constructor 的构造操作 如果没有声明默认构造函数,编译器会在需要的时候帮我们产生出来. 为了避免在多个地方被需要导致重复,则编译器将产生的构造函数声明为inline方式. class Foo {public:Foo(), Foo(int) }; class Bar {public: Foo foo;char *str;} Bar ba

《Android深度探索卷一》第一章Android系统移植与驱动开发概述。

<Android深度探索>第一章讲的是Android系统移植与驱动开发概述.这一章节将对Android以及Linux驱动做一个总体的介绍. Android是一个非常优秀的的嵌入式操作系统.经过几年的发展和演进,Android已经形成了非常完善的系统架构.Android的系统架构分为四层,如下图 Android移植可分为两部分:应用移植和系统移植. Android系统移植是指让Android操作系统在某一个特定硬件平台上运行.使一个操作系统在特定硬件平台上运行的一个首要条件就是该操作系统支持硬件

Android深度探索读书笔记 第一章

第一章首先介绍android系统架构(android是一个非常优秀的嵌入式操作系统),总共分为四层:第一层Linux内核,由于android是基于Linux内核的,所以android跟其他Linux系统没什么差异.这一层这一层主要包括Linux的驱动程序以及内存管理.进程管理.电源管理等.第二层编写的代码库,也包括Dalivk虚拟机的运行时.第三层android SDK 层.第四层应用程序(相当于android的UI).而这一层主要靠第三层中的Android SDK API 完成各种功能.其次介

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

本章介绍了安卓系统移植与驱动开发的概述,安卓的系统架构有四层:1 Linux内核,2 c/c++代码库, 3 Android SDK API, 4 应用程序 在读的过程中看到了专业名词,查了查,长点见识 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节.安卓在移植的时候很大程度上市Linux内核的移植,安卓版本的不同是L

Android深度探索-卷1 第一章

Android是一个非常优秀的嵌入式操作系统,android的系统架构分为4层,第一层为Linux内核,这一层主要包括Linux驱动程序以及内存管理.进程管理.电源管理的等程序.并且不同的Android的版本的驱动可能并不通用.第二层为C/C++代码库,这一层主要包括使用C/C++编写的代码库(Linux下的.so文件),也包括.Dalivak虚拟机的运行时(Runtime).第三层为Android SDK API,这一层也可称java API,这一层是用JAVA编写的各种Library,这些l

【深度探索C++对象模型】第一章 关于对象

第一章 关于对象(Object Lessons) -- 本书作者:Stanley B.Lippman 一.前言 什么是 C++ 对象模型:简单的说,就是 C++ 中面向对象的底层实现机制. 本书组织: 第 1 章,关于对象(Object Lessons),介绍 C++ 对象的基础概念,给读者一个粗略的了解. 第 2 章,构造函数语意学(The Semantics of Constructors),构造函数什么时候会被编译器合成?它给我们的程序效率带来了怎样的影响? 第 3 章,Data语意学(T

【深度探索C++对象模型】第二章 构造函数语意学(上)

第二章 构造函数语意学(The Semantics of Constructors) -- 本书作者:Stanley B.Lippman 一.前言 首先让我们来梳理一个概念: 默认构造函数(Default Constructor) : 是在没有显示提供初始化式时调用的构造函数.它由不带任何参数的构造函数,或是为所有形参提供默认实参的构造函数定义.如果定义的某个类的成员变量没有提供显示的初始化式时,就会调用默认构造函数(Default Contructor). 如果用户的类里面,没有显示的定义任何

深度探索C++对象模型第6章 执行期语意学

(一)对象的构造和析构(Object Construction and Destruction) 一般而言我们会把object尽可能放置在使用它的那个程序区段附近,这么做可以节省非必要的对象产生操作和摧毁操作. 全局对象 如果我们有以下程序片段: Matrix identity main() { //identity 必须在此处被初始化 Matrix m1=identity; ... return 0; } C++保证,一定会在main()函数中第一次用到identity之前,把identity

深度探索C++对象模型 第三章 Data 语意学

一个有趣的问题:下列 类 sizeof大小 class X{}    //1 class Y:public virtual X{} //4 or 8 class Z:public virtual X{} // 4 or 8 class A:public Y,public Z{} // 8 or 12 主要原因:为了保持每一个类生成对象在内存中的唯一性,编译器必须要给空类生成一个char来维持object的唯一性: 而virtual继承中,仅保持了base class的指针,有些编译器会继承bas