欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解C++何時(shí)需要拷貝構(gòu)造函數(shù)

 更新時(shí)間:2023年09月11日 08:48:46   作者:高陽(yáng)言編程  
拷貝構(gòu)造函數(shù)是一個(gè)特殊的構(gòu)造函數(shù),用于創(chuàng)建一個(gè)新對(duì)象,該對(duì)象與另一個(gè)同類(lèi)對(duì)象具有相同的屬性和值,在 C++ 中,拷貝構(gòu)造函數(shù)通常采用另一個(gè)同類(lèi)對(duì)象作為參數(shù),并使用該對(duì)象初始化新對(duì)象,本文給大家講講何時(shí)需要拷貝函數(shù),需要的朋友可以參考下

何時(shí)需要拷貝函數(shù)?

下面我們看一段代碼?

#include <iostream>
using namespace std;
class Line
{
  public:
    string m_name;
    int m_age;
    Line();
    ~Line(); // 析構(gòu)函數(shù)
    void show();
};
Line:: Line()
{
  cout << "無(wú)參構(gòu)造被調(diào)用" << endl;
}
Line:: ~Line()
{
  cout << "析構(gòu)函數(shù)~Line()被調(diào)用" << endl;
}
void Line:: show()
{
  cout << "姓名:" << m_name << ",年齡: " << m_age << endl;
}
int main()
{
  Line line1("張三", 18);
  Line line2 = line1;
  return 0;
}

這時(shí)候編譯,會(huì)提示你

已經(jīng)告訴你答案了。

拷貝構(gòu)造函數(shù)的規(guī)則

拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),它在創(chuàng)建對(duì)象時(shí),是使用同一類(lèi)中之前創(chuàng)建的對(duì)象來(lái)初始化新創(chuàng)建的對(duì)象。

  • 用一個(gè)已存在的對(duì)象創(chuàng)建新的對(duì)象,不會(huì)調(diào)用(普通)構(gòu)造函數(shù),而是調(diào)用拷貝構(gòu)造函數(shù)。

  • 如果類(lèi)中沒(méi)有定義拷貝構(gòu)造函數(shù),編譯器將提供一個(gè)拷貝構(gòu)造函數(shù),它的功能是把已存在對(duì)象的成員變量賦值給新的對(duì)象的成員變量。

  • 用一個(gè)已存在的對(duì)象創(chuàng)建新的對(duì)象語(yǔ)法:

    • 類(lèi)名 新對(duì)象名(已存在的對(duì)象名)

    Line line1("張三", 18);

    Line line2(line1);

    • 類(lèi)名 新對(duì)象名 = 已存在的對(duì)象名。

    Line line1("張三", 18);

    Line line2 = line1;

拷貝構(gòu)造函數(shù)的寫(xiě)法

classname (const classname &obj) 
{ 
    // 構(gòu)造函數(shù)的主體 
}

接下來(lái)把上面的例子補(bǔ)齊

#include <iostream>
using namespace std;
class Line
{
  public:
    string m_name;
    int m_age;
    Line();
    Line(string name, int age);  // 構(gòu)造函數(shù)
    Line(const Line &obj);
    Line(const Line &obj, int n);
    ~Line(); // 析構(gòu)函數(shù)
    void show();
};
Line:: Line()
{
  cout << "無(wú)參構(gòu)造被調(diào)用" << endl;
}
Line:: Line(string name, int age)
{
  m_name = name;
  m_age = age;
  cout << "構(gòu)造函數(shù)Line(string name1, int age)被調(diào)用" << endl;
}
Line:: Line(const Line &obj)
{
  cout << "拷貝構(gòu)造函數(shù)被調(diào)用" << endl;
  cout << "拷貝構(gòu)造 - 姓名:" << obj.m_name << ",拷貝構(gòu)造 - 年齡: " << obj.m_age << endl;
  m_name = obj.m_name;
  m_age = obj.m_age;
}
Line:: ~Line()
{
  cout << "析構(gòu)函數(shù)~Line()被調(diào)用" << endl;
}
// 實(shí)現(xiàn)成員函數(shù)
void Line:: show()
{
  cout << "姓名:" << m_name << ",年齡: " << m_age << endl;
}
int main()
{
  Line line1("張三", 18);
  Line line2 = line1;
  line2.show();
  return 0;
}

執(zhí)行結(jié)果如下:

到此這篇關(guān)于詳解C++何時(shí)需要拷貝構(gòu)造函數(shù)的文章就介紹到這了,更多相關(guān)c++ 拷貝構(gòu)造函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論