📅  最后修改于: 2023-12-03 15:29:52.798000             🧑  作者: Mango
在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;
}