Kopiowanie obiektów klasy
Przypisanie operacji i operacji inicjowania powodować obiektów, które mają być skopiowane.
Przypisanie: gdy wartość jednego obiektu jest przypisany do innego obiektu, pierwszy obiekt jest kopiowany do drugiego obiektu.W związku z tym,
Point a, b; ... a = b;
powoduje, że wartość b do skopiowania na a.
Inicjalizacja: zainicjowanie występuje, gdy obiekt jest zadeklarowana, gdy argumenty są przekazywane do funkcji przez wartość lub wartości są zwracane z funkcji przez wartość.
Można określić semantykę "kopia" dla obiektów klasy.Rozważmy na przykład ten kod:
TextFile a, b;
a.Open( "FILE1.DAT" );
b.Open( "FILE2.DAT" );
b = a;
Powyższy kod może oznaczać "kopiowanie zawartości Plik1.DAT do Plik2.DAT"lub to może oznaczać"Ignoruj Plik2.DAT i b drugi uchwyt do FILE1.DAT. " Odpowiednie semantyki kopiowania należy dołączyć do każdej klasy następująco.
Za pomocą operatora przypisania operator= wraz z odniesieniem do typu klasy jako zwracany typ i parametr, który jest przekazywany przez const odniesienia — na przykład ClassName& operator=(const ClassName& x);.
Za pomocą konstruktora kopii.Aby uzyskać więcej informacji na temat ten konstruktor, zobacz Zasady zgłaszania konstruktory.
Jeśli Konstruktor kopiujący nie są deklarowane, kompilator generuje Konstruktor kopiujący member-wise. Jeśli operator przypisania nie są deklarowane, kompilator generuje member-wise operator przypisania dla Ciebie. DEKLARUJĄC Konstruktor kopiujący nie odrzuca generowanych przez kompilator operator przypisania, ani na odwrót.Zaimplementować jeden, zaleca się również stosowanie drugi tak, że znaczenie kodu jest jasne.
Member-Wise przydziału jest szczegółowo w Memberwise przydziału i inicjalizacja.
Ten konstruktor przyjmuje argument typu Nazwa klasy**&**, gdzie Nazwa klasy jest nazwą, dla którego zdefiniowano konstruktora klasy.Na przykład:
// spec1_copying_class_objects.cpp
class Window
{
public:
Window( const Window& ); // Declare copy constructor.
// ...
};
int main()
{
}
[!UWAGA]
Typ argumentu Konstruktor kopiujący const Nazwa klasy& w każdym przypadku, gdy jest to możliwe.Zapobiega to przypadkowym zmianom obiektu, z którego jest kopiowanie ten konstruktor.Umożliwia również kopiowanie z const obiektów.