📜  C++ 构造函数 (1)

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

C++ 构造函数

什么是构造函数?

在C++中,构造函数是一种特殊的类成员函数,它被用来初始化对象的数据成员。当我们创建一个对象时,构造函数会被自动调用,以确保对象在使用前处于一个合法且合理的状态。构造函数名称与类名称必须相同,且不返回任何类型。

构造函数的语法

构造函数的语法如下所示:

class ClassName 
{
  public:
      ClassName();    //无参数构造函数
      ClassName(arguments); //有参数构造函数
};
  • ClassName() 构造函数没有参数。以下是一个示例:
class Person
{
  public:
      Person();   //无参数构造函数
};

Person::Person()
{
  // 初始化代码在此处
}
  • ClassName(arguments) 构造函数有参数
class Person 
{
  public:
      Person(string name, int age);  //有参数构造函数
};

Person::Person(string name, int age)
{
  this->name = name;
  this->age = age;
  // 在此添加额外的初始化代码
}
构造函数的调用方式

构造函数会在对象创建时自动调用,并且只会被调用一次。以下是一些关于构造函数的调用方式:

  • 显式调用构造函数:
Person person("Tom", 20);
  • 隐式调用构造函数:
Person person = Person("Tom", 20);
Person *person = new Person("Tom", 20);
默认构造函数

如果我们没有定义构造函数,编译器则会自动生成一个默认构造函数。默认构造函数不会执行任何初始化操作。在以下示例中,Person类没有定义构造函数,因此,编译器将会自动生成一个默认构造函数:

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

Person person; // 调用默认构造函数
复制构造函数

复制构造函数是一种特殊的构造函数,它用于创建一个新对象,该对象与现有对象具有相同的数据。复制构造函数的名称必须为类名称,并使用被复制对象作为其参数。以下是一个示例:

class Person 
{
    public:
        Person(const Person &p);    //复制构造函数
};

Person::Person(const Person &p)
{
    name = p.name;
    age = p.age;
    // 在此添加额外的初始化代码
}
构造函数的重载

像其他函数一样,我们可以对构造函数进行重载。通过对构造函数进行不同的参数列表定义,我们可以创建多个构造函数。以下是一个示例:

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

Person::Person()
{
    cout << "我是无参数构造函数" << endl;
}

Person::Person(string name)
{
    this->name = name;
    cout << "我是单参构造函数" << endl;
}

Person::Person(string name, int age)
{
    this->name = name;
    this->age = age;
    cout << "我是双参构造函数" << endl;
}