2 Stimmen

2 verschiedene Arten des Konstruktoraufrufs vom Kopierkonstruktor

Betrachten Sie den nachstehenden Beispielcode:

#include <iostream>

using namespace std;

class core
{
   public:
      core(const core& obj)
      {
         cout << "core copy ctor called\n";
      }
      core()
      {
         cout << "core default ctor called\n";
      }
};

class sample : public core
{
   public:
      sample()
      {
         cout << "sample default ctor called\n";
      }
#if 0
      sample(const sample& obj)
      {
         cout << "sample copy ctor called\n";
      }
#endif
};

int main()
{
   sample s1;
   sample s2 = s1; //Line1
   return 0;
}

Typ1: Kopierkonstruktor nicht explizit für Klassenbeispiel deklariert

(Typ1 ist im obigen Code dargestellt. Dann wird der Kopierkonstruktor der Klasse sample implizit vom Compiler erzeugt). Wenn die Anweisung, Line1 ausgeführt wird, wird zunächst der Kopierkonstruktor von class core aufgerufen, und dann der Kopierkonstruktor von class sample aufgerufen wird.

Typ2: Kopierkonstruktor explizit für die Klasse sample definiert

Wenn die Aussage, Line1 ausgeführt wird, wird zunächst der Standardkonstruktor von class core aufgerufen, und dann der Kopierkonstruktor von class sample aufgerufen wird.

Frage:

Warum gibt es diesen Unterschied im Verhalten für den Kopierkonstruktor, wie in Typ1 und Typ2 erwähnt?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X