1. Язык С++
Конструктор копирования
Оператор присвоения
Алексей Бованенко
пятница, 8 января 2010 г.
2. Введение
• Конструктор копирования
• Позволяет создавать новый экземпляр класса на основе
уже существующего
• Создание конструктора копирования
• Создается программистом
• Может быть создан компилятором
пятница, 8 января 2010 г.
3. Пример конструктора
копирования
• class TestClass{
public:
TestClass();
TestClass(const TestClass& origin);
...
private:
int i;
std::string s;
};
пятница, 8 января 2010 г.
4. Определение конструктора
копирования
• TestClass::TestClass(){}
• TestClass::TestClass(const TestClass& origin)
:i(origin.i)
,s(origin.s){}
пятница, 8 января 2010 г.
6. Введение
• Различие копирующего конструктора и оператора
присвоения
• Копирующий конструктор инициализирует “чистую”
память
• Оператор присвоения работает с уже созданным
объектом
пятница, 8 января 2010 г.
8. Пример использования
• Класс TestClass
• class TestClass{
public:
TestClass();
TestClass(int j, std::string& s1);
TestClass(const TestClass& tc);
TestClass& operator=(const TestClass& tc);
private:
int i;
std::string s;
};
пятница, 8 января 2010 г.
9. Определение конструктора
копирования
• TestClass::TestClass(const TestClass& tc)
:i(tc.i)
,s(tc.s){
std::cout<<"In ctor"<<std::endl;
}
пятница, 8 января 2010 г.
10. Оператор присвоения
• TestClass& TestClass::operator=(const
TestClass& tc)
{
i=tc.i+10;
s ="operator";
return *this;
}
пятница, 8 января 2010 г.
11. Функция main
• std::string s="Hi";
TestClass tc(10,s);
std::cout<<"tc: "<<tc<<std::endl;
TestClass tc1(tc);
std::cout<<"tc1: "<<tc1<<std::endl;
std::string s1="aaaaaa";
TestClass tc2(20,s1);
tc2=tc;
std::cout<<"tc2: "<<tc2<<std::endl;
пятница, 8 января 2010 г.