🗊 Презентация Конструкторы.Деструктор

Категория: Образование
Нажмите для полного просмотра!
Конструкторы.Деструктор, слайд №1 Конструкторы.Деструктор, слайд №2 Конструкторы.Деструктор, слайд №3 Конструкторы.Деструктор, слайд №4 Конструкторы.Деструктор, слайд №5 Конструкторы.Деструктор, слайд №6 Конструкторы.Деструктор, слайд №7 Конструкторы.Деструктор, слайд №8 Конструкторы.Деструктор, слайд №9 Конструкторы.Деструктор, слайд №10 Конструкторы.Деструктор, слайд №11 Конструкторы.Деструктор, слайд №12 Конструкторы.Деструктор, слайд №13 Конструкторы.Деструктор, слайд №14 Конструкторы.Деструктор, слайд №15 Конструкторы.Деструктор, слайд №16 Конструкторы.Деструктор, слайд №17 Конструкторы.Деструктор, слайд №18 Конструкторы.Деструктор, слайд №19 Конструкторы.Деструктор, слайд №20 Конструкторы.Деструктор, слайд №21 Конструкторы.Деструктор, слайд №22 Конструкторы.Деструктор, слайд №23 Конструкторы.Деструктор, слайд №24 Конструкторы.Деструктор, слайд №25 Конструкторы.Деструктор, слайд №26 Конструкторы.Деструктор, слайд №27 Конструкторы.Деструктор, слайд №28 Конструкторы.Деструктор, слайд №29 Конструкторы.Деструктор, слайд №30 Конструкторы.Деструктор, слайд №31 Конструкторы.Деструктор, слайд №32 Конструкторы.Деструктор, слайд №33 Конструкторы.Деструктор, слайд №34

Содержание

Вы можете ознакомиться и скачать презентацию на тему Конструкторы.Деструктор. Доклад-сообщение содержит 34 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1


Назначение конструктора
Описание слайда:
Назначение конструктора

Слайд 2


Проблема Внутри описания класса инициализировать нельзя по синтаксису структуры, но и вне класса записать s.len = 0; s.line[0] = ’\0’; тоже нельзя,...
Описание слайда:
Проблема Внутри описания класса инициализировать нельзя по синтаксису структуры, но и вне класса записать s.len = 0; s.line[0] = ’\0’; тоже нельзя, т.к. член-данные из части private недоступны. ( Заметим, что если определить их в части public, то их можно инициализировать как структуру, т.е. String s = {“”, 0}; )

Слайд 3


Выход Инициализацию должна выполнять специальная член-функция класса.
Описание слайда:
Выход Инициализацию должна выполнять специальная член-функция класса.

Слайд 4


Конструктор! Определение. Член-функция класса, предназначенная для инициализации член-данных класса при определении объектов класса, называется...
Описание слайда:
Конструктор! Определение. Член-функция класса, предназначенная для инициализации член-данных класса при определении объектов класса, называется конструктором. Конструктор всегда имеет имя класса.

Слайд 5


Конструктор в классе String Объявление : String(); Определение конструктора: String:: String() { len = 0; line[0] = ’\0’;} (1) Определение объектов:...
Описание слайда:
Конструктор в классе String Объявление : String(); Определение конструктора: String:: String() { len = 0; line[0] = ’\0’;} (1) Определение объектов: String s1, s2; .

Слайд 6


Конструктор в классе String Конструктор , и выполняет инициализацию объектов Так как конструктор не имеет аргументов, то он называется конструктором...
Описание слайда:
Конструктор в классе String Конструктор , и выполняет инициализацию объектов Так как конструктор не имеет аргументов, то он называется конструктором по умолчанию.

Слайд 7


Несколько конструкторов String:: String(const char * s) (2) { for( len = 0; line[len] != ‘\0’; len++) line[len] = s[len]; } Тогда объекты можно...
Описание слайда:
Несколько конструкторов String:: String(const char * s) (2) { for( len = 0; line[len] != ‘\0’; len++) line[len] = s[len]; } Тогда объекты можно определить таким образом String s1, s2(“Иванов”), s3 = String(“Петров”); Для объекта s3 конструктор задается явно(но так конструктор используется редко)

Слайд 8


Заметим, что в классе должен быть один конструктор по умолчанию и один или несколько с аргументами.
Описание слайда:
Заметим, что в классе должен быть один конструктор по умолчанию и один или несколько с аргументами.

Слайд 9


Особенности конструктора, как функции: 1. Главная - конструктор не имеет возвращаемого значения (даже void), так как его единственное назначение –...
Описание слайда:
Особенности конструктора, как функции: 1. Главная - конструктор не имеет возвращаемого значения (даже void), так как его единственное назначение – инициализировать собственные член- данные объекта; 2. Конструктор имеет имя класса; 3. Конструктор всегда работает неявно при определении объектов класса

Слайд 10


Недостаток определенного класса String это то, что он берет для каждого объекта 259 байтов памяти, хотя фактически использует меньше class String{...
Описание слайда:
Недостаток определенного класса String это то, что он берет для каждого объекта 259 байтов памяти, хотя фактически использует меньше class String{ char *line; int len; public: .... };

Слайд 11


Другие конструкторы В классе объявим 2 конструктора String(int l = 80); //с аргументом по // умолчанию String (const char *); //с аргументом //...
Описание слайда:
Другие конструкторы В классе объявим 2 конструктора String(int l = 80); //с аргументом по // умолчанию String (const char *); //с аргументом // строкой

Слайд 12


String:: String(int l) // l=80 – не повторять! (3) {line = new char [l]; len=0; line[0]=’\0’; } String::String(const char * s) (2’) {line = new char...
Описание слайда:
String:: String(int l) // l=80 – не повторять! (3) {line = new char [l]; len=0; line[0]=’\0’; } String::String(const char * s) (2’) {line = new char [strlen(s)+1];// для нуль-кода for( len = 0; line[len] != ‘\0’; len++) line[len] = s[len]; }

Слайд 13


Пример использования
Описание слайда:
Пример использования

Слайд 14


Замечание В классе должен быть или конструктор по умолчанию без аргументов вида (1), или конструктор с аргументом по умолчанию вида (3) String ss;...
Описание слайда:
Замечание В классе должен быть или конструктор по умолчанию без аргументов вида (1), или конструктор с аргументом по умолчанию вида (3) String ss; ‘Ambiguity between ‘String::String()’ and ‘String::String(int)’ - ‘Двусмысленность между String() и String( int )’

Слайд 15


Инициализация значением другой переменной В С++ кроме инициализации константным значением int x = 5; ... x++; ... используется и такая инициализация...
Описание слайда:
Инициализация значением другой переменной В С++ кроме инициализации константным значением int x = 5; ... x++; ... используется и такая инициализация данных int y = x; // инициализация одного данного // значением другого

Слайд 16


В классе String подобная инициализация В классе String подобная инициализация может привести к ошибкам. String s(“паровоз”); ... String r = s; //...
Описание слайда:
В классе String подобная инициализация В классе String подобная инициализация может привести к ошибкам. String s(“паровоз”); ... String r = s; // определение объекта r и // инициализация его значением // объекта s r.Index(4) = ‘х’ ; r.Index(6) = ‘д’;// изменим на пароход s.Print(); r.Print(); Увидим, что выведется пароход в обоих случаях. Это плохо.

Слайд 17


Разберемся, почему это происходит
Описание слайда:
Разберемся, почему это происходит

Слайд 18


Конструкторы.Деструктор, слайд №18
Описание слайда:

Слайд 19


Что неграмотно и недопустимо ! Что неграмотно и недопустимо !
Описание слайда:
Что неграмотно и недопустимо ! Что неграмотно и недопустимо !

Слайд 20


Поэтому для инициализации одного объекта Поэтому для инициализации одного объекта другим надо определить специальный конструктор копирования X :: X(...
Описание слайда:
Поэтому для инициализации одного объекта Поэтому для инициализации одного объекта другим надо определить специальный конструктор копирования X :: X( X& ); // где X - имя класса String(String &); String::String(String &s) { line = new char[ s.len + 1 ]; for( len = 0; line[len] != ‘\0’; len++) line[len] = s.line[len]; }

Слайд 21


Тогда инициализация String r = s; выполнится грамотно.
Описание слайда:
Тогда инициализация String r = s; выполнится грамотно.

Слайд 22


Все верно s.Print(); // выведет ‘паровоз’ r.Print(); // выведет ‘пароход’
Описание слайда:
Все верно s.Print(); // выведет ‘паровоз’ r.Print(); // выведет ‘пароход’

Слайд 23


Замечание Конструктор копирования кроме рассмотренной инициализации работает также при передаче значений фактических аргументов-объектов в функцию...
Описание слайда:
Замечание Конструктор копирования кроме рассмотренной инициализации работает также при передаче значений фактических аргументов-объектов в функцию при возврате результата-объекта из функции.

Слайд 24


п 3.3. Деструктор В языке С++ одним из важных моментов является освобождение памяти, занятой переменными, при выходе из функции. void F()
Описание слайда:
п 3.3. Деструктор В языке С++ одним из важных моментов является освобождение памяти, занятой переменными, при выходе из функции. void F()

Слайд 25


При выходе из функции освобождается память При выходе из функции освобождается память для локальных объектов, т.е. k, s1,s2, s3. Но рассмотрим...
Описание слайда:
При выходе из функции освобождается память При выходе из функции освобождается память для локальных объектов, т.е. k, s1,s2, s3. Но рассмотрим внимательнее, как это будет реализовано.

Слайд 26


Для того, чтобы при выходе из Для того, чтобы при выходе из функций динамическая память, которая берется конструкторами объектов, освобождалась...
Описание слайда:
Для того, чтобы при выходе из Для того, чтобы при выходе из функций динамическая память, которая берется конструкторами объектов, освобождалась автоматически, надо задать специальную член-функцию деструктор.

Слайд 27


Деструктор Определение. Деструктор - это член функция класса, предназначенная для освобождения динамической памяти, занимаемой член-данными класса,...
Описание слайда:
Деструктор Определение. Деструктор - это член функция класса, предназначенная для освобождения динамической памяти, занимаемой член-данными класса, при выходе из функций. Деструктор имеет формат ~ имя_класса(){…}

Слайд 28


Пример Для класса String его можно определить таким образом ~ String() {delete [ ] line;}
Описание слайда:
Пример Для класса String его можно определить таким образом ~ String() {delete [ ] line;}

Слайд 29


Пример В этом случае при выходе из области видимости функции F() память для объектов s1, s2, которую брал конструктор для поля line, будет...
Описание слайда:
Пример В этом случае при выходе из области видимости функции F() память для объектов s1, s2, которую брал конструктор для поля line, будет освобождена. Заданный деструктор это будет делать по умолчанию.

Слайд 30


Конструкторы.Деструктор, слайд №30
Описание слайда:

Слайд 31


Особенности деструктора как функции: он не имеет аргументов; он не возвращает значения; работает неявно для всех объектов при выходе из функций...
Описание слайда:
Особенности деструктора как функции: он не имеет аргументов; он не возвращает значения; работает неявно для всех объектов при выходе из функций Замечание. Работу деструктора можно “увидеть”, если в деструкторе задать какой- либо вывод. ~String() { printf(“\nРаботает деструктор класса String”); delete [ ] line; }

Слайд 32


class String class String {char *line; int len; public: String(int l=80); // конструктор по умолчанию String(const char *); //конструктор с...
Описание слайда:
class String class String {char *line; int len; public: String(int l=80); // конструктор по умолчанию String(const char *); //конструктор с аргументом String(String &); // конструктор копирования ~String() { delete [] line;} // деструктор void Print() { cout

Слайд 33


char & Index (int) char & String:: Index (int i) { if(i=len) cout
Описание слайда:
char & Index (int) char & String:: Index (int i) { if(i=len) cout

Слайд 34


Возвращаемый тип char Если определить тип возвращаемого значения просто char, то присвоение вида r.Index (4) = ’х’; (*) было бы ошибочным, так как...
Описание слайда:
Возвращаемый тип char Если определить тип возвращаемого значения просто char, то присвоение вида r.Index (4) = ’х’; (*) было бы ошибочным, так как функция вернет значение символа и компилятор будет трактовать оператор (*), как присвоение одного кода символа другому коду, как в данном примере ‘в’=’х’; что невозможно.



Похожие презентации
Mypresentation.ru
Загрузить презентацию