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

1,声明与定义。c++

//声明式以下:git

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

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

class Widget;    //类声明this

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

class GraphNode;3d

//定义式以下:指针

int x;    //对象的定义对象

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

{

  ...

}

class Widget               //类的定义

{

  ...

};

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

class GraphNode

{

  ...

};

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

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

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

3,对于c++的类,类的对象存储的是类中描述的数据成员。这些数据成员多是本身类中声明的,也多是父类继承而来的。但类的对象中并无存储成员函数。成员函数实际上是全部对象共用的。调用的时候,会隐藏一个this指针传入成员函数用以区分是哪一个对象调用了成员函数。

4,一个程序的设计能够有很是多种:面向对象仍是面向过程。若是是面向对象的话,是经过继承类实现代码重用仍是不经过继承。是否须要虚继承、是否须要虚函数、是否须要支持模板等等,还能够考虑使用宏来实现,速度比函数调用还要快。

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

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

7,

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

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

9,

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

10,

相关文章
相关标签/搜索