详解C++何时需要拷贝构造函数
作者:高阳言编程
拷贝构造函数是一个特殊的构造函数,用于创建一个新对象,该对象与另一个同类对象具有相同的属性和值,在 C++ 中,拷贝构造函数通常采用另一个同类对象作为参数,并使用该对象初始化新对象,本文给大家讲讲何时需要拷贝函数,需要的朋友可以参考下
何时需要拷贝函数?
下面我们看一段代码?
#include <iostream>
using namespace std;
class Line
{
  public:
    string m_name;
    int m_age;
    Line();
    ~Line(); // 析构函数
    void show();
};
Line:: Line()
{
  cout << "无参构造被调用" << endl;
}
Line:: ~Line()
{
  cout << "析构函数~Line()被调用" << endl;
}
void Line:: show()
{
  cout << "姓名:" << m_name << ",年龄: " << m_age << endl;
}
int main()
{
  Line line1("张三", 18);
  Line line2 = line1;
  return 0;
}这时候编译,会提示你

已经告诉你答案了。
拷贝构造函数的规则
拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。
用一个已存在的对象创建新的对象,不会调用(普通)构造函数,而是调用拷贝构造函数。
如果类中没有定义拷贝构造函数,编译器将提供一个拷贝构造函数,它的功能是把已存在对象的成员变量赋值给新的对象的成员变量。
用一个已存在的对象创建新的对象语法:
- 类名 新对象名(已存在的对象名)
 
Line line1("张三", 18);
Line line2(line1);
- 类名 新对象名 = 已存在的对象名。
 
Line line1("张三", 18);
Line line2 = line1;
拷贝构造函数的写法
classname (const classname &obj) 
{ 
    // 构造函数的主体 
}接下来把上面的例子补齐
#include <iostream>
using namespace std;
class Line
{
  public:
    string m_name;
    int m_age;
    Line();
    Line(string name, int age);  // 构造函数
    Line(const Line &obj);
    Line(const Line &obj, int n);
    ~Line(); // 析构函数
    void show();
};
Line:: Line()
{
  cout << "无参构造被调用" << endl;
}
Line:: Line(string name, int age)
{
  m_name = name;
  m_age = age;
  cout << "构造函数Line(string name1, int age)被调用" << endl;
}
Line:: Line(const Line &obj)
{
  cout << "拷贝构造函数被调用" << endl;
  cout << "拷贝构造 - 姓名:" << obj.m_name << ",拷贝构造 - 年龄: " << obj.m_age << endl;
  m_name = obj.m_name;
  m_age = obj.m_age;
}
Line:: ~Line()
{
  cout << "析构函数~Line()被调用" << endl;
}
// 实现成员函数
void Line:: show()
{
  cout << "姓名:" << m_name << ",年龄: " << m_age << endl;
}
int main()
{
  Line line1("张三", 18);
  Line line2 = line1;
  line2.show();
  return 0;
}执行结果如下:

到此这篇关于详解C++何时需要拷贝构造函数的文章就介绍到这了,更多相关c++ 拷贝构造函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
