SlideShare uma empresa Scribd logo
1 de 13
Baixar para ler offline
Язык С++

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

                                          Алексей Бованенко

пятница, 8 января 2010 г.
Введение
                        •   Конструктор копирования

                            •   Позволяет создавать новый экземпляр класса на основе
                                уже существующего

                        •   Создание конструктора копирования

                            •   Создается программистом

                            •   Может быть создан компилятором


пятница, 8 января 2010 г.
Пример конструктора
                                    копирования
                       •    class TestClass{
                            public:
                               TestClass();
                               TestClass(const TestClass& origin);
                                ...
                            private:
                                int i;
                                std::string s;
                            };

пятница, 8 января 2010 г.
Определение конструктора
                                       копирования


                        •   TestClass::TestClass(){}

                        •   TestClass::TestClass(const TestClass& origin)
                            :i(origin.i)
                            ,s(origin.s){}




пятница, 8 января 2010 г.
Оператор присвоения



пятница, 8 января 2010 г.
Введение

                        •   Различие копирующего конструктора и оператора
                            присвоения

                            •   Копирующий конструктор инициализирует “чистую”
                                память

                            •   Оператор присвоения работает с уже созданным
                                объектом



пятница, 8 января 2010 г.
Оператор присвоения

                        •   ClassName& operator= (const ClassName& cn)
                            {
                              // присвоение полей
                              return *this;
                            }




пятница, 8 января 2010 г.
Пример использования
                      •     Класс 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 г.
Определение конструктора
                                     копирования

                        •   TestClass::TestClass(const TestClass& tc)
                            :i(tc.i)
                            ,s(tc.s){
                              std::cout<<"In ctor"<<std::endl;
                            }




пятница, 8 января 2010 г.
Оператор присвоения
                        •   TestClass& TestClass::operator=(const
                            TestClass& tc)
                            {	
                               i=tc.i+10;
                               s ="operator";
                               return *this;
                            }


пятница, 8 января 2010 г.
Функция 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 г.
Результат




пятница, 8 января 2010 г.
Конец

                                        Вопросы?
                            e-mail: a.bovanenko@gmail.com

пятница, 8 января 2010 г.

Mais conteúdo relacionado

Mais procurados

Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версийUnguryan Vitaliy
 
Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11Yandex
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey TeplyakovAlex Tumanoff
 
Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Anton Moiseenko
 
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Dima Dzuba
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.Unguryan Vitaliy
 
Обработка исключений
Обработка исключенийОбработка исключений
Обработка исключенийZhaslan Doschanov
 
9. java lecture library
9. java lecture library9. java lecture library
9. java lecture libraryMERA_school
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAlex Tumanoff
 
Java. Сборщик мусора. Работа с памятью.
Java.  Сборщик мусора. Работа с памятью. Java.  Сборщик мусора. Работа с памятью.
Java. Сборщик мусора. Работа с памятью. Unguryan Vitaliy
 
Поговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаПоговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаAlexander Kucherenko
 
Android - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsAndroid - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsNoveo
 
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev FedorProgramming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev FedorFedor Lavrentyev
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3Technopark
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Dima Dzuba
 
модульное тестирование для Perl. алексей шруб. зал 4
модульное тестирование для Perl. алексей шруб. зал 4модульное тестирование для Perl. алексей шруб. зал 4
модульное тестирование для Perl. алексей шруб. зал 4rit2011
 

Mais procurados (19)

Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версий
 
Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11
 
java
javajava
java
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
 
Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.
 
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8.
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.
 
Обработка исключений
Обработка исключенийОбработка исключений
Обработка исключений
 
9. java lecture library
9. java lecture library9. java lecture library
9. java lecture library
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey Teplyakov
 
Java. Сборщик мусора. Работа с памятью.
Java.  Сборщик мусора. Работа с памятью. Java.  Сборщик мусора. Работа с памятью.
Java. Сборщик мусора. Работа с памятью.
 
Поговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаПоговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языка
 
Android - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsAndroid - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, generics
 
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev FedorProgramming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
 
модульное тестирование для Perl. алексей шруб. зал 4
модульное тестирование для Perl. алексей шруб. зал 4модульное тестирование для Perl. алексей шруб. зал 4
модульное тестирование для Perl. алексей шруб. зал 4
 
Generics
GenericsGenerics
Generics
 

Destaque (16)

enum. Java.
enum. Java.enum. Java.
enum. Java.
 
Объект Logger
Объект LoggerОбъект Logger
Объект Logger
 
GaleríA Monica Ramirez
GaleríA Monica RamirezGaleríA Monica Ramirez
GaleríA Monica Ramirez
 
Drag And Drop Windows Forms
Drag And Drop Windows FormsDrag And Drop Windows Forms
Drag And Drop Windows Forms
 
cookie. support by php
cookie. support by phpcookie. support by php
cookie. support by php
 
Обработка символов в языке C
Обработка символов в языке CОбработка символов в языке C
Обработка символов в языке C
 
php sessions
php sessionsphp sessions
php sessions
 
Java. Classes.
Java. Classes.Java. Classes.
Java. Classes.
 
jQuery
jQueryjQuery
jQuery
 
Classes: Number, String, StringBuffer, StringBuilder
Classes: Number, String, StringBuffer, StringBuilderClasses: Number, String, StringBuffer, StringBuilder
Classes: Number, String, StringBuffer, StringBuilder
 
RJ Evans Retained Search
RJ Evans Retained SearchRJ Evans Retained Search
RJ Evans Retained Search
 
How To Make A Great Pbj
How To Make A Great PbjHow To Make A Great Pbj
How To Make A Great Pbj
 
Apache
ApacheApache
Apache
 
C# BufferedStream
C# BufferedStreamC# BufferedStream
C# BufferedStream
 
How To Make A Great Pbj
How To Make A Great PbjHow To Make A Great Pbj
How To Make A Great Pbj
 
How To Make A Great Pbj
How To Make A Great PbjHow To Make A Great Pbj
How To Make A Great Pbj
 

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

стандартная библиотека с++: введение
стандартная библиотека с++: введениестандартная библиотека с++: введение
стандартная библиотека с++: введениеmcroitor
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.Igor Shkulipa
 
Андрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзеАндрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзеElias Fofanov
 
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаAndrey Karpov
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.Igor Shkulipa
 

Semelhante a Конструктор копирования (6)

Tempale Intro
Tempale IntroTempale Intro
Tempale Intro
 
стандартная библиотека с++: введение
стандартная библиотека с++: введениестандартная библиотека с++: введение
стандартная библиотека с++: введение
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
 
Андрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзеАндрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзе
 
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программиста
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.
 

Mais de Alexey Bovanenko (20)

Python sqlite3
Python sqlite3Python sqlite3
Python sqlite3
 
Python. re
Python. rePython. re
Python. re
 
python dict
python dictpython dict
python dict
 
Python. Строки
Python. СтрокиPython. Строки
Python. Строки
 
Python. Введение
Python. ВведениеPython. Введение
Python. Введение
 
Nio java
Nio javaNio java
Nio java
 
Конвертация строковых данных в числовые
Конвертация строковых данных в числовыеКонвертация строковых данных в числовые
Конвертация строковых данных в числовые
 
Assert c
Assert cAssert c
Assert c
 
System c
System cSystem c
System c
 
Javascript functions
Javascript functionsJavascript functions
Javascript functions
 
Javascript String object
Javascript String objectJavascript String object
Javascript String object
 
File. Java
File. JavaFile. Java
File. Java
 
ZIP, GZIP Streams in java
ZIP, GZIP Streams in javaZIP, GZIP Streams in java
ZIP, GZIP Streams in java
 
transaction. php
transaction. phptransaction. php
transaction. php
 
Java IO. Streams
Java IO. StreamsJava IO. Streams
Java IO. Streams
 
Regular Expressions
Regular ExpressionsRegular Expressions
Regular Expressions
 
Исключительные ситуации
Исключительные ситуацииИсключительные ситуации
Исключительные ситуации
 
Files. Php.
Files. Php.Files. Php.
Files. Php.
 
Perl. Anonymous arrays, hashes, subroutines. Closures
Perl. Anonymous arrays, hashes, subroutines. ClosuresPerl. Anonymous arrays, hashes, subroutines. Closures
Perl. Anonymous arrays, hashes, subroutines. Closures
 
PHP introduction
PHP introductionPHP introduction
PHP introduction
 

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

  • 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 г.
  • 7. Оператор присвоения • ClassName& operator= (const ClassName& cn) { // присвоение полей return *this; } пятница, 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 г.
  • 13. Конец Вопросы? e-mail: a.bovanenko@gmail.com пятница, 8 января 2010 г.