Skip to content
On this page

CPP_构造函数


标签:CPP/面向对象  

构造函数 Constructor

  • 与类同名
  • 没有返回值
  • 可有参数,可无参数
  • 可以不写,编译器会提供一个默认的无参构造
    • 相当于申请空间时候的 hook

调用时机

  • 栈区:使用类实例化对象,直接调用构造函数
  • 堆区:使用指针,不调用构造函数,只使用 new 申请空间,编译器默认调用构造函数

支持重载

  • 可有多个构造函数,支持重载
  • 可重载默认提供的拷贝构造和移动构造
  • 有参构造没初始化的参数会默认随机值
  • 如果定义了一个有参构造,默认提供的无参构造会无效

初始化列表

  • 构造函数函数体内,一般是实现逻辑功能的,初始化工作放在初始化列表中完成
  • 格式在形参列表后面,由冒号引 成员变量1(形参), 成员变量2(形参2)...
cpp
Rect() : length(0), width(0) {
  // assignment is not initialization
  // this->length = 0;
  // this->width = 0;
  cout << "no-arg constructor" << endl;
}
Rect(int length, int width): length(length), width(width) {
  // this->length = length;
  // this->width = width;
  cout << "arg constructor" << endl;
}

必须使用的情况

  • 当形参名和成员变量名重名的时候,可以用初始化列表解决冲突(但是函数体内部还是需要使用 this 来区分)
  • const 常量成员变量时,常量成员无法修改,只能在初始化的时候赋值
  • 有引用成员变量时,因为引用变量只能在初始化的时候赋值
  • 有其他类成员子对象时,该成员必须初始化,所以必须在列表中显示调用其构造函数完成

Last updated: