Инструменты пользователя

Инструменты сайта


конструктор_копирования

Содержание

Конструктор копирования

Конструктор копирование функция класса которая вызывается автоматически каждый раз в момент создание копии объекта.

  1. Явное создание копии объекта (программист)
  2. Не явно создание копии объекта
    • Возврат объекта из функции
    • Передача объекта в функцию по значению
    • Вовремя работы механизма исключения

Автоматически сгенерированный конструктор
Если программист не определили конструктор компилятор создает его сам в момент компиляции (такой конструктор копирования осуществляет копирование всех полей класса вызывая для них их конструкторы копирования).

Если объект не нуждается в копирование такая операция должна быть запрещена.

  1. Класс инкапсулирующий сетевой соединение
  2. Класс инкапсулирующий работу с файлам
  3. Объект в приложении должен существовать в единственном экземпляре

Запрет запрещается путем размещение конструктора копирование в полях privat реализацию тела можно не писать синтаксис объявление конструктора копирование Type (const Type & name);

Любой конструктор копирования имеет следующую форму:

имя_класса (const имя_класса & obj)
{
 ... // тело конструктора
}

Инициализация одного объекта другим

#include <iostream>
#include <Windows.h>
using namespace std;
class CTest
{
private:
	char *str;
	int leng;
public:
	CTest ()
	{
		str=new char [strlen("12345")+1];
		strcpy(str,"12345");
		leng=10;
		cout<<"Создать"<<endl;
	}
	CTest (const CTest & obj)//конструктора копирования
	{	
		leng=obj.leng;
		str=new char [strlen(obj.str)+1];
		strcpy(str,obj.str);
		cout<<"Копирывать"<<endl;
	}
	~CTest()
	{
		delete []str;
		cout<<"Удалить"<<endl;;
	}
};
void main ()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	CTest A;
	CTest B=A;//Вызов конструктора копирования
}

Передача объекта в функцию

#include <iostream>
using namespace std;
class Copy 
{
public:
 
	Copy ()
	{
 
		cout<<"Создать"<<endl;
	}
	//конструктор копирование 
	Copy (const Copy&obj)
	{
		cout<<"Копирывать"<<endl;
	}
	~Copy ()
	{
		cout<<"Удалить"<<endl;;
	}
};
void F(Copy temp){
	cout<<"Функция F\n";
}
 
void main ()
{
	Copy copy;
	F(copy);
}

Примеры

Задача 1.поезд