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?