Latest web development tutorials

C ++ Kopierkonstruktor

C ++ Klasse & Objekte C ++ Klasse & Objekte

Der Copy - Konstruktorist eine spezielle Konstruktor, wenn Sie ein Objekt erstellen, das Objekt ist die gleiche Art von zuvor erstellten verwenden , um das neu erstellte Objekt zu initialisieren. Der Copy-Konstruktor wird normalerweise verwendet:

  • Durch ein anderes Objekt des gleichen Typs mit der neu erstellte Objekt zu initialisieren.

  • Kopieren Sie das Objekt übergeben Sie es als Parameter an die Funktion.

  • Kopieren Sie das Objekt, und das Objekt wird von der Funktion zurückgegeben.

Wenn die Klasse keine Kopie Konstruktor definieren, der Compiler selbst definiert ein. Wenn die Klasse mit einer Zeigervariablen und dynamische Speicherzuweisung, muss er eine Kopie Konstruktor haben. Kopierkonstruktors häufigste Form ist wie folgt:

classname (const classname &obj) {
   // 构造函数的主体
}

Hier obj ist ein Verweis auf ein Objekt, das Objekt verwendet wird ein anderes Objekt zu initialisieren.

#include <iostream>

using namespace std;

class Line
{
   public:
      int getLength( void );
      Line( int len );             // 简单的构造函数
      Line( const Line &obj);  // 拷贝构造函数
      ~Line();                     // 析构函数

   private:
      int *ptr;
};

// 成员函数定义,包括构造函数
Line::Line(int len)
{
    cout << "Normal constructor allocating ptr" << endl;
    // 为指针分配内存
    ptr = new int;
    *ptr = len;
}

Line::Line(const Line &obj)
{
    cout << "Copy constructor allocating ptr." << endl;
    ptr = new int;
   *ptr = *obj.ptr; // copy the value
}

Line::~Line(void)
{
    cout << "Freeing memory!" << endl;
    delete ptr;
}
int Line::getLength( void )
{
    return *ptr;
}

void display(Line obj)
{
   cout << "Length of line : " << obj.getLength() <<endl;
}

// 程序的主函数
int main( )
{
   Line line(10);

   display(line);

   return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

Normal constructor allocating ptr
Copy constructor allocating ptr.
Length of line : 10
Freeing memory!
Freeing memory!

Die folgenden Beispiele für das obige Beispiel leicht modifiziert, indem die gleiche Art von Gegenständen verwendet, hat das neu erstellte Objekt zu initialisieren:

#include <iostream>

using namespace std;

class Line
{
   public:
      int getLength( void );
      Line( int len );             // 简单的构造函数
      Line( const Line &obj);  // 拷贝构造函数
      ~Line();                     // 析构函数

   private:
      int *ptr;
};

// 成员函数定义,包括构造函数
Line::Line(int len)
{
    cout << "Normal constructor allocating ptr" << endl;
    // 为指针分配内存
    ptr = new int;
    *ptr = len;
}

Line::Line(const Line &obj)
{
    cout << "Copy constructor allocating ptr." << endl;
    ptr = new int;
   *ptr = *obj.ptr; // copy the value
}

Line::~Line(void)
{
    cout << "Freeing memory!" << endl;
    delete ptr;
}
int Line::getLength( void )
{
    return *ptr;
}

void display(Line obj)
{
   cout << "Length of line : " << obj.getLength() <<endl;
}

// 程序的主函数
int main( )
{
   Line line1(10);

   Line line2 = line1; // 这里也调用了拷贝构造函数

   display(line1);
   display(line2);

   return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

Normal constructor allocating ptr
Copy constructor allocating ptr.
Copy constructor allocating ptr.
Length of line : 10
Freeing memory!
Copy constructor allocating ptr.
Length of line : 10
Freeing memory!
Freeing memory!
Freeing memory!

C ++ Klasse & Objekte C ++ Klasse & Objekte