C++入门 -- Tips
1、C++对象的内存模型:
编译器会将成员变量和成员函数分开存储:分别为每个对象的成员变量分配内存,但是所有对象都共享同一段函数代码,如下图:
成员变量在堆区或栈区分配内存,成员函数在代码区分配内存
2、构造函数初始化列表
初始化 const 成员变量的唯一方法就是使用初始化列表。
3、静态成员变量
static 成员变量属于类,不属于某个具体的对象,即使创建多个对象,也只为其分配一份内存,所有对象使用的都是这份内存中的数据。
static 成员变量必须在类声明的外部初始化,在初始化时分配内存。
静态成员变量在初始化时不能再加 static,但必须要有数据类型。被 private、protected、public 修饰的静态成员变量都可以用这种方式初始化。
4、静态成员函数
普通成员函数可以访问所有成员(包括成员变量和成员函数),静态成员函数只能访问静态成员。
普通成员函数只能在创建对象后通过对象来调用,因为它需要当前对象的地址作为隐式的形参。而静态成员函数可以通过类来直接调用,编译器不会为它增加形参 this,它不需要当前对象的地址,所以不管有没有创建对象,都可以调用静态成员函数。
和静态成员变量类似,静态成员函数在声明时要加 static,在定义时不能加 static。
5、常成员函数
常成员函数需要在声明和定义的时候在函数头部的结尾加上 const 关键字。
常量表达式的值虽然在内存中,但是没有办法寻址,所以也不能使用&
来获取它的地址,更不能用指针指向它
6、继承
当存在继承关系时,派生类的作用域嵌套在基类的作用域内。
有继承关系时,派生类的内存模型可以看作是基类成员变量和新增成员变量的总和,而所有成员函数仍然在代码区,由所以对象共享。