下面我将为您详细讲解C++中拷贝构造函数的使用攻略。
什么是拷贝构造函数
在C++中,拷贝构造函数是一种特殊的构造函数,它用于将一个已有的对象复制到一个新对象中。拷贝构造函数的特殊之处在于它只有一个入参,且该入参为当前类的对象的引用,通常被称为复制构造函数。
拷贝构造函数具有如下特点:
- 它是一种特殊的构造函数,其函数名为类名。
- 它只有一个入参,类型为当前类的对象的引用。
- 它通过将入参的值逐一复制构造一个新对象。
- 当创建对象时,如果没有显式地定义拷贝构造函数,则系统会默认生成拷贝构造函数,其原型为
类名(const 类名&)
。
在何时使用拷贝构造函数
以下是拷贝构造函数的使用场景:
-
当使用一个对象来初始化同类型的另一个对象时,会调用该对象的拷贝构造函数。
-
当函数的形参是类的对象时,函数调用时,会调用该对象的拷贝构造函数,用实参来初始化形参。
-
当函数的返回值是类的对象时,函数返回时,会调用该对象的拷贝构造函数,将函数内的局部变量复制给函数外的变量。
下面将分别介绍以上三种情况下的代码实现。
示例代码1:使用一个对象初始化同类型的另一个对象
#include <iostream>
using namespace std;
class Person
{
public:
string name;
int age;
Person(string name, int age)
{
this->name = name;
this->age = age;
cout << "调用了构造函数!" << endl;
}
Person(const Person &p)
{
this->name = p.name;
this->age = p.age;
cout << "调用了拷贝构造函数!" << endl;
}
};
int main()
{
Person p("张三", 20); // 调用了构造函数!
Person p1 = p; // 调用了拷贝构造函数!
cout << "p1的信息为:" << p1.name << " " << p1.age << endl;
return 0;
}
上述代码中,我们定义了一个Person
类,其中包含两个属性name
和age
,以及两个构造函数:一个普通的构造函数和一个拷贝构造函数。在main
函数中,我们创建了一个Person
对象p
,并通过p1=p
的方式使用p
来初始化同类型的另一个对象p1
,最后输出p1
中的数据。
运行结果如下:
调用了构造函数!
调用了拷贝构造函数!
p1的信息为:张三 20
示例代码2:函数的形参是类的对象
#include <iostream>
using namespace std;
class Person
{
public:
string name;
int age;
Person(string name, int age)
{
this->name = name;
this->age = age;
cout << "调用了构造函数!" << endl;
}
Person(const Person &p)
{
this->name = p.name;
this->age = p.age;
cout << "调用了拷贝构造函数!" << endl;
}
void printInfo(Person p1) // 函数的形参是类的对象
{
cout << "姓名:" << p1.name << " 年龄:" << p1.age << endl;
}
};
int main()
{
Person p("张三", 20); // 调用了构造函数!
p.printInfo(p); // 调用了拷贝构造函数!
return 0;
}
上述代码中,我们新增了一个成员函数printInfo
,该函数的形参是类的对象。我们在main
函数中将p
对象传入该函数中,函数内部会通过拷贝构造函数来复制一份p
对象,然后输出其中的数据。
运行结果如下:
调用了构造函数!
调用了拷贝构造函数!
姓名:张三 年龄:20
示例代码3:函数的返回值是类的对象
#include <iostream>
using namespace std;
class Person
{
public:
string name;
int age;
Person(string name, int age)
{
this->name = name;
this->age = age;
cout << "调用了构造函数!" << endl;
}
Person(const Person &p)
{
this->name = p.name;
this->age = p.age;
cout << "调用了拷贝构造函数!" << endl;
}
Person getPerson() // 函数的返回值是类的对象
{
Person p("张三", 20);
return p;
}
};
int main()
{
Person p1 = p.getPerson(); // 调用了构造函数和拷贝构造函数!
cout << "p1的信息为:" << p1.name << " " << p1.age << endl;
return 0;
}
上述代码中,我们新增了一个成员函数getPerson
,该函数的返回值是类的对象。我们在main
函数中使用getPerson
函数来返回一个Person
对象,并将其赋值给p1
对象,最后输出其中的数据。
运行结果如下:
调用了构造函数!
调用了拷贝构造函数!
p1的信息为:张三 20
至此,C++中拷贝构造函数的使用攻略就讲解完毕了。希望能给您带来帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中拷贝构造函数的使用 - Python技术站