📜  c++ 构造函数 - C++ (1)

📅  最后修改于: 2023-12-03 15:29:52.796000             🧑  作者: Mango

C++ 构造函数

在 C++ 中,构造函数是一种特殊的方法,用于初始化对象的属性。在创建对象时,构造函数会被自动调用。C++ 中的构造函数可以接受参数,也可以不接受参数。

默认构造函数

如果一个类没有定义构造函数,则会自动创建一个默认的构造函数。默认的构造函数不接受任何参数,也不执行任何操作。例如:

class Person {
public:
    string name;
    int age;
};

// 创建 Person 对象
Person p; // 编译器会自动生成默认构造函数

请注意,在上面的代码中,即使没有显式定义构造函数,C++ 仍然会为 Person 类生成一个默认的构造函数。当我们创建一个新的 Person 对象时,这个默认的构造函数会被自动调用。

// 初始化 Person 对象
p.name = "Alice";
p.age = 20;
构造函数的语法

构造函数的语法与类的定义相似,但必须具有与类名称相同的名称,并且不能有返回类型。例如:

class Person {
public:
    string name;
    int age;
    Person(); // 构造函数
};

Person::Person() {
    name = "unknown";
    age = 0;
}

在上面的代码中,我们定义了一个名为 Person 的类,其中包含一个无参构造函数。在这个构造函数中,我们初始化了 name 和 age。

接下来,我们可以创建 Person 对象并初始化它们,例如:

// 创建 Person 对象并初始化
Person p1; // 调用无参构造函数
p1.name = "Alice";
p1.age = 20;

Person p2; // 调用无参构造函数
p2.name = "Bob";
p2.age = 30;
带参构造函数

在上面的例子中,我们演示了如何定义一个无参构造函数。现在我们来看看如何定义一个带参构造函数。

在带参构造函数中,我们可以确保对象被正确地创建和初始化。例如,我们可以使用带参构造函数来初始化一个 Person 对象,例如:

class Person {
public:
    string name;
    int age;
    Person(string name, int age); // 构造函数
};

Person::Person(string name, int age) {
    this->name = name;
    this->age = age;
}

在上面的代码中,我们定义了一个带有两个参数的构造函数来创建 Person 对象。构造函数的参数是 name 和 age,我们使用 this 指针将参数值分配给对象属性。

接下来,我们可以创建 Person 对象并使用带参构造函数来初始化它们,例如:

// 创建 Person 对象并使用带参构造函数初始化
Person p1("Alice", 20); 
Person p2("Bob", 30);
拷贝构造函数

拷贝构造函数是一种特殊的构造函数,它用于创建一个新对象,并从现有对象中初始化它。拷贝构造函数接受一个对象引用作为参数。例如:

class Person {
public:
    string name;
    int age;
    Person(); // 无参构造函数
    Person(string name, int age); // 带参构造函数
    Person(const Person& p); // 拷贝构造函数
};

Person::Person(const Person& p) {
    name = p.name;
    age = p.age;
}

在上面的代码中,我们定义了一个拷贝构造函数,它从给定的 Person 对象 p 中初始化一个新的 Person 对象。

现在,我们可以创建一个新的 Person 对象,并使用拷贝构造函数从现有的 Person 对象中初始化它,例如:

// 使用拷贝构造函数初始化新的 Person 对象
Person p1("Alice", 20);
Person p2 = p1; // 使用拷贝构造函数

在这个例子中,我们创建了一个名为 p1 的 Person 对象,并将其名称设置为 "Alice",年龄设置为 20。我们然后创建一个名为 p2 的新 Person 对象,并使用拷贝构造函数从 p1 中初始化它们。

总结

以上是 C++ 中构造函数的详细介绍。构造函数是一种特殊的方法,用于初始化对象的属性。默认构造函数被用来初始化不带任何参数的对象,而带参构造函数可以用来初始化带参数的对象。

拷贝构造函数用于从现有对象中创建并初始化新对象。使用构造函数可以确保对象被正确地初始化,并提供更安全、更可靠的代码。