Оцените презентацию от 1 до 5 баллов!
Тип файла:
ppt / pptx (powerpoint)
Всего слайдов:
90 слайдов
Для класса:
1,2,3,4,5,6,7,8,9,10,11
Размер файла:
4.60 MB
Просмотров:
228
Скачиваний:
1
Автор:
неизвестен
Слайды и текст к этой презентации:
№1 слайд![Конструкторы и деструкторы](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img0.jpg)
Содержание слайда: Конструкторы и деструкторы
Прикладное программирование
№2 слайд![Конструктор и деструктор При](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img1.jpg)
Содержание слайда: Конструктор и деструктор
При создании объектов одной из наиболее широко используемых операций является инициализация элементов данных объекта. Единственным способом, с помощью которого можно обратиться к частным элементам данных, является использование функций класса. Чтобы упростить процесс инициализации элементов данных класса, C++ использует специальную функцию, называемую конструктором, которая запускается для каждого создаваемого объекта.
Деструктор запускается при уничтожении объекта. Деструктор обычно используется, если при уничтожении объекта нужно освободить память, которую занимал объект.
№3 слайд![Основные концепции](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img2.jpg)
Содержание слайда: Основные концепции:
Конструктор представляет собой метод класса, который облегчает создаваемым программам инициализацию элементов данных класса.
Конструктор имеет такое же имя, как и класс.
Конструктор не имеет возвращаемого значения.
Каждый раз, когда ваша программа создает переменную класса, C++ вызывает конструктор класса, если конструктор существует.
№4 слайд![Основные концепции Многие](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img3.jpg)
Содержание слайда: Основные концепции:
Многие объекты могут распределять память для хранения информации; когда уничтожается такой объект, C++ будет вызывать специальный деструктор, который может освобождать эту память, очищая ее после объекта.
Деструктор имеет такое же имя, как и класс, за исключением того, что необходимо предварять его имя символом тильды (~).
Деструктор не имеет возвращаемого значения.
№5 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img4.jpg)
Содержание слайда: Создание простого конструктора
Добавим в класс Students конструктор, который будет принимать имя и фамилию ученика, и сохранять эти значения в соответствующих переменных класса.
№6 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img5.jpg)
Содержание слайда: Создание простого конструктора
// Конструктор Students
Students::Students(std::string name, std::string last_name)
{
Students::set_name(name);
Students::set_last_name(last_name);
}
№7 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img6.jpg)
Содержание слайда: Создание простого конструктора
При создании нового объекта, мы должны передать конструктору имя и фамилию студента. Иначе компиляция программы завершится с ошибкой.
std::string name = “Иван”
std::string last_name =“Иванов”
Students *student = new Students(name, last_name);
№8 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img7.jpg)
Содержание слайда: Создание простого конструктора
Теперь добавим прототип конструктора в файл students.h.
/* students.h */
#pragma once /* Защита от двойного подключения заголовочного файла */
#include <string>
№9 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img8.jpg)
Содержание слайда: Создание простого конструктора
class Students {
public:
// Конструктор класса Students
Students(std::string, std::string);
// Установка имени студента
void set_name(std::string);
// Получение имени студента
std::string get_name();
№10 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img9.jpg)
Содержание слайда: Создание простого конструктора
// Установка фамилии студента
void set_last_name(std::string);
// Получение фамилии студента
std::string get_last_name();
// Установка промежуточных оценок
void set_scores(int []);
№11 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img10.jpg)
Содержание слайда: Создание простого конструктора
// Установка среднего балла
void set_average_ball(float);
// Получение среднего балла
float get_average_ball();
private:
// Промежуточные оценки
int scores[5];
№12 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img11.jpg)
Содержание слайда: Создание простого конструктора
// Средний балл
float average_ball;
// Имя
std::string name;
// Фамилия
std::string last_name;
};
№13 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img12.jpg)
Содержание слайда: Создание простого конструктора
В файле students.cpp определим сам конструктор.
/* students.cpp */
#include <string>
#include <fstream>
#include "students.h"
№14 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img13.jpg)
Содержание слайда: Создание простого конструктора
/ Конструктор Students
Students::Students(std::string name, std::string last_name)
{
Students::set_name(name);
Students::set_last_name(last_name);
}
№15 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img14.jpg)
Содержание слайда: Создание простого конструктора
// Установка имени студента
void Students::set_name(std::string student_name)
{
Students::name = student_name;
}
№16 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img15.jpg)
Содержание слайда: Создание простого конструктора
// Получение имени студента
std::string Students::get_name()
{
return Students::name;
}
№17 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img16.jpg)
Содержание слайда: Создание простого конструктора
// Установка фамилии студента
void Students::set_last_name(std::string student_last_name)
{
Students::last_name = student_last_name;
}
№18 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img17.jpg)
Содержание слайда: Создание простого конструктора
// Получение фамилии студента
std::string Students::get_last_name()
{
return Students::last_name;
}
№19 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img18.jpg)
Содержание слайда: Создание простого конструктора
// Установка промежуточных оценок
void Students::set_scores(int scores[])
{
int sum = 0;
for (int i = 0; i < 5; ++i) {
Students::scores[i] = scores[i];
sum += scores[i];
}
}
№20 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img19.jpg)
Содержание слайда: Создание простого конструктора
// Установка среднего балла
void Students::set_average_ball(float ball)
{
Students::average_ball = ball;
}
№21 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img20.jpg)
Содержание слайда: Создание простого конструктора
// Получение среднего балла
float Students::get_average_ball()
{
return Students::average_ball;
}
№22 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img21.jpg)
Содержание слайда: Создание простого конструктора
В main() мы принимаем от пользователя имя и фамилию ученика, и сохраняем их во временных локальных переменных. После этого создаем новый объект класса Students, передавая его конструктору эти переменные.
№23 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img22.jpg)
Содержание слайда: Создание простого конструктора
/* main.cpp */
#include <iostream>
#include "students.h“
int main(int argc, char *argv[])
{
// Локальная переменная, хранящая имя ученика
std::string name;
// И его фамилию
std::string last_name;
№24 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img23.jpg)
Содержание слайда: Создание простого конструктора
// Ввод имени
std::cout << "Name: ";
getline(std::cin, name);
// И фамилии
std::cout << "Last name: ";
getline(std::cin, last_name);
№25 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img24.jpg)
Содержание слайда: Создание простого конструктора
// Передача параметров конструктору
Students *student = new Students(name, last_name);
// Оценки
int scores[5];
// Сумма всех оценок
int sum = 0;
№26 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img25.jpg)
Содержание слайда: Создание простого конструктора
// Ввод промежуточных оценок
for (int i = 0; i < 5; ++i) {
std::cout << "Score " << i+1 << ": ";
std::cin >> scores[i];
// суммирование
sum += scores[i];
}
№27 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img26.jpg)
Содержание слайда: Создание простого конструктора
// Сохраняем промежуточные оценки в объект класса Student
student->set_scores(scores);
// Считаем средний балл
float average_ball = sum / 5.0;
// Сохраняем средний балл
student->set_average_ball(average_ball);
№28 слайд![Создание простого](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img27.jpg)
Содержание слайда: Создание простого конструктора
// Выводим данные по студенту
std::cout << "Average ball for " << student->get_name() << " "
<< student->get_last_name() << " is "
<< student->get_average_ball() << std::endl;
// Удаление объекта student из памяти
delete student;
return 0;
}
№29 слайд![Сохранение оценок в файл](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img28.jpg)
Содержание слайда: Сохранение оценок в файл
Чтобы после завершения работы с программой, все данные сохранялись, необходимо записывать их в текстовый файл.
Пример файла с оценками представлен в следующем виде:
Андрей Сидоров 5 5 3 4 5
Иван Иванов 5 3 3 3 3
№30 слайд![Сохранение оценок в файл Для](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img29.jpg)
Содержание слайда: Сохранение оценок в файл
Для работы с файлами воспользуемся библиотекой fstream, которая подключается в заголовочном файле с таким же именем.
#include <fstream>
// Запись данных о студенте в файл
void Students::save()
{
std::ofstream fout("students.txt", std::ios::app);
№31 слайд![Сохранение оценок в файл fout](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img30.jpg)
Содержание слайда: Сохранение оценок в файл
fout << Students::get_name() << " "
<< Students::get_last_name() << " ";
for (int i = 0; i < 5; ++i) {
fout << Students::scores[i] << " ";
}
fout << std::endl;
fout.close();
}
№32 слайд![Сохранение оценок в файл](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img31.jpg)
Содержание слайда: Сохранение оценок в файл
Переменная fout — это объект класса ofstream, который находится внутри библиотеки fstream. Класс ofstream используется для записи каких-либо данных во внешний файл. У него тоже есть конструктор. Он принимает в качестве параметров имя выходного файла и режим записи.
№33 слайд![Сохранение оценок в файл В](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img32.jpg)
Содержание слайда: Сохранение оценок в файл
В данном случае, мы используем режим добавления — std::ios:app (append). После завершения работы с файлом, необходимо вызвать метод close() для того, чтобы закрыть файловый дескриптор.
№34 слайд![Сохранение оценок в файл тобы](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img33.jpg)
Содержание слайда: Сохранение оценок в файл
тобы сохранить оценки студента, мы будем вызывать только что созданный метод save().
Students student = new Students(“Иван", “Иванов");
student->save();
№35 слайд![Деструктор Логично было бы](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img34.jpg)
Содержание слайда: Деструктор
Логично было бы сохранять все оценки после того, как работа со студентом закончена. Для этого создадим деструктор класса Students, который будет вызывать метод save() перед уничтожением объекта.
// Деструктор Students
Students::~Students()
{
Students::save();
}
№36 слайд![Деструктор Добавим прототипы](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img35.jpg)
Содержание слайда: Деструктор
Добавим прототипы деструктора и метода save() в students.h.
/* students.h */
#pragma once /* Защита от двойного подключения заголовочного файла */
#include <string>
№37 слайд![Деструктор class Students](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img36.jpg)
Содержание слайда: Деструктор
class Students {
public:
// Запись данных о студенте в файл
void save();
// Деструктор класса Students
~Students();
№38 слайд![Деструктор Конструктор класса](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img37.jpg)
Содержание слайда: Деструктор
// Конструктор класса Students
Students(std::string, std::string);
// Установка имени студента
void set_name(std::string);
// Получение имени студента
std::string get_name();
№39 слайд![Деструктор Установка фамилии](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img38.jpg)
Содержание слайда: Деструктор
// Установка фамилии студента
void set_last_name(std::string);
// Получение фамилии студента
std::string get_last_name();
№40 слайд![Деструктор Установка](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img39.jpg)
Содержание слайда: Деструктор
// Установка промежуточных оценок
void set_scores(int []);
// Получение массива с промежуточными оценками
int *get_scores();
// Получение строки с промежуточными оценками
std::string get_scores_str(char);
№41 слайд![Деструктор Установка среднего](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img40.jpg)
Содержание слайда: Деструктор
// Установка среднего балла
void set_average_ball(float);
// Получение среднего балла
float get_average_ball();
private:
// Промежуточные оценки
int scores[5];
№42 слайд![Деструктор Средний балл float](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img41.jpg)
Содержание слайда: Деструктор
// Средний балл
float average_ball;
// Имя
std::string name;
// Фамилия
std::string last_name;
};
№43 слайд![Деструктор И определим эти](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img42.jpg)
Содержание слайда: Деструктор
И определим эти функции в students.cpp.
/* students.cpp */
#include <string>
#include <fstream>
#include "students.h"
№44 слайд![Деструктор Деструктор](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img43.jpg)
Содержание слайда: Деструктор
// Деструктор Students
Students::~Students()
{
Students::save();
}
№45 слайд![Деструктор Запись данных о](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img44.jpg)
Содержание слайда: Деструктор
// Запись данных о студенте в файл
void Students::save()
{
std::ofstream fout("students.txt", std::ios::app);
fout << Students::get_name() << " "
<< Students::get_last_name() << " ";
for (int i = 0; i < 5; ++i) {
fout << Students::scores[i] << " ";
}
fout << std::endl;
fout.close();
}
№46 слайд![Деструктор Конструктор](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img45.jpg)
Содержание слайда: Деструктор
// Конструктор Students
Students::Students(std::string name, std::string last_name)
{
Students::set_name(name);
Students::set_last_name(last_name);
}
№47 слайд![Деструктор Установка имени](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img46.jpg)
Содержание слайда: Деструктор
// Установка имени студента
void Students::set_name(std::string student_name)
{
Students::name = student_name;
}
№48 слайд![Деструктор Получение имени](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img47.jpg)
Содержание слайда: Деструктор
// Получение имени студента
std::string Students::get_name()
{
return Students::name;
}
№49 слайд![Деструктор Установка фамилии](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img48.jpg)
Содержание слайда: Деструктор
// Установка фамилии студента
void Students::set_last_name(std::string student_last_name)
{
Students::last_name = student_last_name;
}
№50 слайд![Деструктор Получение фамилии](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img49.jpg)
Содержание слайда: Деструктор
// Получение фамилии студента
std::string Students::get_last_name()
{
return Students::last_name;
}
№51 слайд![Деструктор Установка](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img50.jpg)
Содержание слайда: Деструктор
// Установка промежуточных оценок
void Students::set_scores(int scores[])
{
int sum = 0;
for (int i = 0; i < 5; ++i) {
Students::scores[i] = scores[i];
sum += scores[i];
}
}
№52 слайд![Деструктор Получение массива](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img51.jpg)
Содержание слайда: Деструктор
// Получение массива с промежуточными оценками
int *Students::get_scores()
{
return Students::scores;
}
№53 слайд![Деструктор Установка среднего](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img52.jpg)
Содержание слайда: Деструктор
// Установка среднего балла
void Students::set_average_ball(float ball)
{
Students::average_ball = ball;
}
№54 слайд![Деструктор Получение среднего](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img53.jpg)
Содержание слайда: Деструктор
/ Получение среднего балла
float Students::get_average_ball()
{
return Students::average_ball;
}
№55 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img54.jpg)
№56 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img55.jpg)
№57 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img56.jpg)
№58 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img57.jpg)
№59 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img58.jpg)
№60 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img59.jpg)
№61 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img60.jpg)
№62 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img61.jpg)
№63 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img62.jpg)
№64 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img63.jpg)
№65 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img64.jpg)
№66 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img65.jpg)
№67 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img66.jpg)
№68 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img67.jpg)
№69 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img68.jpg)
№70 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img69.jpg)
№71 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img70.jpg)
№72 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img71.jpg)
№73 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img72.jpg)
№74 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img73.jpg)
№75 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img74.jpg)
№76 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img75.jpg)
№77 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img76.jpg)
№78 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img77.jpg)
№79 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img78.jpg)
№80 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img79.jpg)
№81 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img80.jpg)
№82 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img81.jpg)
№83 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img82.jpg)
№84 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img83.jpg)
№85 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img84.jpg)
№86 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img85.jpg)
№87 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img86.jpg)
№88 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img87.jpg)
№89 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img88.jpg)
№90 слайд![](/documents_6/2e25558ee072ddc5f25d78dafbd994a1/img89.jpg)