什么是构造函数?
构造函数是类对象在使用前进行的初始化工作。就像炒菜前需要备齐食材一样,对象创建时必须通过构造函数完成初始化,否则无法使用。
#include <iostream>
class Student {
public:
Student() {
age = 18;
name = "hello world";
}
int age;
std::string name;
};
int main(void) {
Student st; // 调用默认构造函数初始化
using namespace std;
cout << "name=" << st.name << " age=" << st.age << endl;
return 0;
}
这里创建了 Student 对象 st,编译器自动调用了无参构造函数 Student()。如果你显式提供了无参构造函数,编译器就不会再生成默认的无参版本。
提示:若未显式提供无参构造函数,编译器会生成一个默认的。但要注意,编译器生成的默认构造函数不会初始化基本类型成员(如
int、指针),它们的值是未定义的随机值。
默认构造函数详解
默认构造函数主要有三种情况:
- 编译器隐式生成:当类中未定义任何构造函数时,编译器自动生成一个 public 的 inline 默认构造函数。它不初始化内置类型成员。
- 用户自定义无参:程序员显式编写无参构造函数。
- 全缺省参数构造:所有参数都有默认值的构造函数,例如
Demo(int a = 0, int b = 0)。
常见陷阱
如果手动提供了有参构造函数,编译器将不再提供无参构造函数。此时若尝试无参创建对象,会编译报错。
#include <iostream>
using namespace std;
class Person {
public:
int age_;
string name_;
Person( age, string name) {
age_ = age;
name_ = name;
}
() = ;
};
{
;
Person p2;
;
}

