构造函数:(直接用在结构体里面,重载构造函数可以通过)
1. 用来初始化
2. 可以重载
3. 一定得是public,没有定义的话系统自动定义
4. 没有返回值,前面不能加返回值类型
5. 两种:1 直接写函数那样写(函数体内初始化) 2 初始化列表写(注意顺序)
6. 注意,如果定义了初始化函数而且没有重载,就一定要传参不能直接new 或者 T xxx;
这个定义了一定要传参
class Student{
private:
int a, b, c;
public:
Student(int x);
void show();
};
//采用初始化列表,前面传参的
Student::Student(int x): b(x), a(b), c(a){
//TODO:
}
//因为声明的时候a 在 b前面所以这个相当于
Student::Student(int x): b(x), a(b), c(a){
a = b; // a == INF
b = x; // b == x
c = a; // c == INF
}
注意,
1. 初始化的顺序只和定义时的顺序有关
2. :后面的那个叫初始化列表
!!!! 如果变量加了const那么只能用初始化列表的方式来搞
例如
class VLA{
private:
const int m_len;
int *m_arr;
public:
VLA(int len);
};
//必须使用初始化列表来初始化 m_len
VLA::VLA(int len): m_len(len){
m_arr = new int[len];
}