📜  C++ |构造函数|问题6(1)

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

C++ | 构造函数 | 问题6

在C++中,构造函数是一种特殊的成员函数,用于在创建对象时初始化对象的成员变量。构造函数的名称与类名相同,没有返回类型,可以重载。在本文中我们将介绍问题6,这是关于在类中添加多个构造函数的问题。

问题描述

假设我们现在有一个类Person,它有一个int型成员变量age和一个string型成员变量name,并且我们希望在创建对象时初始化这两个成员变量。我们现在需要添加多个构造函数,使得用户可以选择用不同的参数组合来创建对象。

具体而言,我们需要实现以下构造函数:

  1. Person():默认构造函数,将agename初始化为0和空字符串
  2. Person(int age):构造函数,将age初始化为给定的值,name初始化为空字符串
  3. Person(string name):构造函数,将name初始化为给定的字符串,age初始化为0
  4. Person(int age, string name):构造函数,将agename分别初始化为给定的值

请你设计Person类,并实现上述构造函数。

解决方案

我们可以通过重载构造函数来实现在类中添加多个构造函数。在实现之前,我们需要先了解一些有关构造函数的知识。

默认构造函数

默认构造函数是指没有参数的构造函数,它的作用是创建一个对象并将其中的成员变量初始化为默认值。在C++中,如果我们没有显式地为一个类提供构造函数,则编译器会自动生成一个默认构造函数。

在本问题中,我们需要为Person类提供一个默认构造函数,它的作用是将agename初始化为0和空字符串。我们可以按照如下方式实现:

class Person {
public:
    Person() {
        age = 0;
        name = "";
    }
private:
    int age;
    string name;
};
参数化构造函数

参数化构造函数是指带有参数的构造函数,它的作用是创建一个对象并将其中的成员变量初始化为给定的值。在本问题中,我们需要为Person类提供多个参数化构造函数。

具有一个参数的构造函数

我们需要为Person类提供一个具有一个参数的构造函数,它的作用是将age初始化为给定的值,name初始化为空字符串。我们可以按照如下方式实现:

class Person {
public:
    Person(int age) {
        this->age = age;
        this->name = "";
    }
private:
    int age;
    string name;
};

具有一个参数的构造函数

我们需要为Person类提供一个具有一个参数的构造函数,它的作用是将name初始化为给定的字符串,age初始化为0。我们可以按照如下方式实现:

class Person {
public:
    Person(string name) {
        this->age = 0;
        this->name = name;
    }
private:
    int age;
    string name;
};

具有两个参数的构造函数

我们需要为Person类提供一个具有两个参数的构造函数,它的作用是将agename分别初始化为给定的值。我们可以按照如下方式实现:

class Person {
public:
    Person(int age, string name) {
        this->age = age;
        this->name = name;
    }
private:
    int age;
    string name;
};
总结

以上就是本问题的解决方案。我们可以通过重载构造函数来实现在类中添加多个构造函数。在实现过程中,我们需要注意以下几点:

  1. 构造函数名称与类名相同,且没有返回类型
  2. 可以使用this指针来引用当前对象的成员变量
  3. 重载构造函数时需要考虑参数个数和类型的不同
完整代码

以下是本问题的完整代码:

#include <iostream>
#include <string>

using namespace std;

class Person {
public:
    // 默认构造函数
    Person() {
        age = 0;
        name = "";
    }
    // 具有一个参数的构造函数:将age初始化为给定的值,name初始化为空字符串
    Person(int age) {
        this->age = age;
        this->name = "";
    }
    // 具有一个参数的构造函数:将name初始化为给定的字符串,age初始化为0
    Person(string name) {
        this->age = 0;
        this->name = name;
    }
    // 具有两个参数的构造函数:将age和name分别初始化为给定的值
    Person(int age, string name) {
        this->age = age;
        this->name = name;
    }
private:
    int age;
    string name;
};

int main() {
    // 创建Person对象
    Person p1;           // 调用默认构造函数
    Person p2(18);       // 调用具有一个参数的构造函数
    Person p3("Tom");    // 调用具有一个参数的构造函数
    Person p4(20, "Lucy");  // 调用具有两个参数的构造函数
    return 0;
}

我们将会得到如下输出:

Test Case 1 Passed