文章目录
- 一、类的默认方法
- 二、类的成员变量初始化
- 1 类的成员变量有三种初始化方法:
- 2 成员变量初始化顺序
- 3 const和static的初始化
- 三、C++内存区域
- 四、const和static
一、类的默认方法
C++的类都会有8个默认方法
- 默认构造函数
- 默认拷贝构造函数
- 默认析构函数
- 默认重载赋值运算符 = 函数
- 默认重载取址运算符 & 函数
- 默认重载取址运算符 & const函数
- 默认移动构造函数(C++11)
- 默认重载移动赋值操作符函数(C++11)
二、类的成员变量初始化
1 类的成员变量有三种初始化方法:
class Person{
public:
A():b=5
{
a = 1;
};
private:
int a;
int b;
int c = 10;
}
- 构造函数体初始化 a
- 初始化列表初始化 b
- 内部初始化 c
2 成员变量初始化顺序
- 类成员变量通过初始化列表初始化时,与构造函数中的初始化列表中的变量顺序无关,只与定义成员变量的顺序有关。
- 类成员变量通过构造函数体初始化时,初始化顺序由构造函数体中的变量初始化顺序决定,与类成员变量的定义顺序无关系。
- 在类构造函数中,如果初始化列表和构造函数体同时对一个变量进行了初始化,列表初始化会优先得到执行,接着才会执行构造函数体中的变量初始化。
- C++11类内部初始化,优先于任何构造函数初始化成员变量。内部初始化后,如果构造函数不显示重新初始化成员变量默认值,成员变量将保持内部初始化值默认值;如果构造函数显示重新初始化成员变量默认值,成员变量将保持构造函数重新赋值。
3 const和static的初始化
const变量在构造列表初始化。
static变量是类变量,一般需要在类外部显示的初始化。
三、C++内存区域
四、const和static
const变量和static变量都存在于 全局静态区,生命周期是整个程序。
- 静态局部变量:作为 static 局部变量在函数内定义,它的生存期为整个源程序,但是其作用域仍与局部变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它!
- 静态全局变量:也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。
- 从分配内存空间看:全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间。
- 总结
static 全局变量:改变作用范围,不改变存储位置
static 局部变量:改变生命周期,不改变作用范围 - 静态函数 :在函数的返回类型前加上static关键字,函数即被定义为静态函数。静态函数与普通函数不同,它只能在声明它的文件当中可见,不能被其它文件使用。如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数也称为内部函数。定义一个内部函数,只需在函数类型前再加一个“static”关键字即可。