Слайд 3Классы и объекты в С++ являются основными концепциями объектно-ориентированного программирования
— ООП.
Объектно-ориентированное программирование — расширение структурного программирования, в котором
основными концепциями являются понятия классов и объектов.
Основное отличие языка программирования С++ от С состоит в том, что в С нет классов, а следовательно язык С не поддерживает ООП, в отличие от С++.
Слайд 4Определение класса
Классы — это некоторые описания, схемы, чертежи по которым
создаются объекты.
Слайд 5Классы имеют свои функции, которые называются методами класса.
Передвижение велосипеда
осуществляется за счёт вращения педалей, если рассматривать велосипед с точки
зрения ООП, то механизм вращения педалей — это метод класса.
Слайд 6Каждый велосипед имеет свой цвет, вес, различные составляющие — всё
это свойства. Причём у каждого созданного объекта свойства могут различаться.
Имея один класс, можно создать неограниченно количество объектов (велосипедов), каждый из которых будет обладать одинаковым набором методов, при этом можно не задумываться о внутренней реализации механизма вращения педалей, колёс, срабатывания системы торможения, так как всё это уже будет определено в классе.
Слайд 7Классы в С++
Классы в С++ — это абстракция описывающая методы, свойства,
ещё не существующих объектов.
Объекты — конкретное представление абстракции, имеющее свои свойства
и методы. Созданные объекты на основе одного класса называются экземплярами этого класса. Эти объекты могут иметь различное поведение, свойства, но все равно будут являться объектами одного класса.
Слайд 8Структура объявления классов
// объявление классов в С++
class /*имя класса*/
{
private:
/* список
свойств и методов для использования внутри класса */
public:
/* список методов
доступных другим функциям и объектам программы */
protected:
/*список средств, доступных при наследовании*/
};
Слайд 9Пример программы
// classes.cpp: определяет точку входа для консольного приложения.
#include
using
namespace std;
// начало объявления класса
class CppStudio // имя класса
{
public: // спецификатор доступа
void
message() // функция (метод класса) выводящая сообщение на экран
Слайд 10Продолжение программы
{
cout
+\n";
}
}; // конец объявления класса CppStudio
int main(int argc, char* argv[])
{
CppStudio objMessage; // объявление
объекта
objMessage.message(); // вызов функции класса message
system("pause");
return 0;
}
Слайд 12SET и GET — функции классов
Атрибуты объекта хранятся в переменных,
объявленных внутри класса, которому принадлежит данный объект. Причём, объявление переменных
должно выполняться со спецификатором доступа private. Такие переменные называются элементами данных.
set и get функции позволяют манипулировать элементами данных
Слайд 13SET и GET — функции классов
set-функции инициализируют элементы данных, get-функции позволяют просмотреть значения
элементов данных.
Доработаем класс CppStudio так, чтобы в нём можно было хранить дату в
формате дд.мм.гг. Для изменения и просмотра даты реализуем соответственно set и get функции.
Слайд 14Пример класса CppStudio
// classes.cpp: определяет точку входа для консольного приложения.
#include
using
namespace std;
class CppStudio // имя класса
{
private: // спецификатор доступа private
int day, // день
month, //
месяц
year; // год
public: // спецификатор доступа public
void message() // функция (метод класса) выводящая сообщение на экран
Слайд 15Пример класса CppStudio
{
cout
+\n";
}
void setDate(int date_day, int date_month, int date_year) // установка даты в формате дд.мм.гг
{
day
= date_day; // инициализация день
month = date_month; // инициализация месяц
year = date_year; // инициализация год
}
Слайд 16Пример класса CppStudio
void getDate() // отобразить текущую дату
{
cout
класса CppStudio
int main(int argc, char* argv[])
{
setlocale(LC_ALL, "rus"); // установка локали
Слайд 17Пример класса CppStudio
int day, month, year;
cout
год!\n";
cout day;
cout
month;
cout << "год: "; cin >> year;
CppStudio objCppstudio; // объявление объекта
objCppstudio.message(); // вызов функции класса message
objCppstudio.setDate(day, month, year); // инициализация даты
objCppstudio.getDate(); // отобразить дату
system("pause");
return 0;
}
Слайд 19Конструктор
Конструктор — специальная функция, которая выполняет начальную инициализацию элементов данных, причём
имя конструктора обязательно должно совпадать с именем класса. Важным отличием
конструктора от остальных функций является то, что он не возвращает значений вообще никаких, в том числе и void.
В любом классе должен быть конструктор, даже если явным образом конструктор не объявлен, то компилятор предоставляет конструктор по умолчанию, без параметров.
Слайд 20Доработанная программа
// classes.cpp: определяет точку входа для консольного приложения.
#include
using
namespace std;
class CppStudio // имя класса
{
private: // спецификатор доступа private
int day, // день
month, //
месяц
year; // год
public: // спецификатор доступа public
// конструктор класса
CppStudio(int date_day, int date_month, int date_year )
Слайд 21Доработанная программа
{
// вызов функции установки даты
setDate(date_day, date_month, date_year);
}
// функция
(метод класса) выводящая сообщение на экран
void message()
{
cout
Classes and Objects in C + +\n";
}
// установка даты в формате дд.мм.гг
void setDate(int date_day, int date_month, int date_year)
Слайд 22Доработанная программа
{
day = date_day; // инициализация день
month = date_month; // инициализация месяц
year
= date_year; // инициализация год
}
void getDate() // отобразить текущую дату
{
cout
<< day << "." << month << "." << year << endl;
}
Слайд 23Доработанная программа
int main(int argc, char* argv[])
{
CppStudio objCppstudio(11,11,2011); // объявление объекта и инициализация
элементов данных
objCppstudio.message(); // вызов функции message
objCppstudio.getDate(); // отобразить дату
system("pause");
return 0;
}
}; // конец объявления
класса CppStudio
Слайд 24Объявление класса в отдельном файле
Чтобы воспользоваться ранее разработанным классом, необходимо
подключить файл, в котором он объявлен. Подключение файлов выполняется с
помощью препроцессорной директивы #include. Но, если подключить файл с классом, появится новая проблема — так как в файле с классом уже есть функция main(), то при построении проекта компилятор выдаст ошибку.
Суть ошибки: «В проекте найдено несколько main() — функций.» Именно поэтому класс необходимо объявлять в отдельном файле, чтобы его можно было неоднократно использовать.
Слайд 25Объявление класса в отдельном файле
Для этого необходимо выполнить 3 шага:
добавить
в проект заголовочный файл *.h;
в заголовочном файле объявить пользовательский класс,
в
нашем случае — CppStudio;
3. подключить заголовочный файл к программе, в нашем случае — #include "CppStudio.h"
Слайд 26написать программу для учета успеваемости студенто
ПРИМЕР
Слайд 27Основные понятия
Объект класса: студент
Свойства: имя, фамилия, оценки и средний балл.
У каждого студента есть имя — name и фамилия last_name . Также, у него
есть промежуточные оценки за весь семестр. Эти оценки мы будем записывать в целочисленный массив из пяти элементов. После того, как все пять оценок будут проставлены, определим средний балл успеваемости студента за весь семестр — свойство average_ball.
Слайд 28Основные понятия
Методы — это функции, которые могут выполнять какие-либо действия над
данными (свойствами) класса. Добавим в наш класс функцию calculate_average_ball(), которая будет
определять средний балл успеваемости ученика.
Методы класса — это его функции.
Свойства класса — его переменные.
Слайд 29Программа учета успеваемости
class Students {
public:
// Функция, считающая средний балл
void calculate_average_ball()
{
int sum = 0; // Сумма всех оценок
for (int i = 0; i < 5; ++i) {
sum += scores[i];
}
Слайд 30Программа учета успеваемости
// считаем среднее арифметическое
average_ball = sum / 5.0;
}
std::string name; // Имя студента
std::string last_name; // Фамилия
// Пять промежуточных оценок студента
int scores[5];
private:
float average_ball; // Итоговая оценка за семестр
};
Слайд 31Модификаторы доступа public и private
Закрытые данные класса размещаются после модификатора
доступа private. Если отсутствует модификатор public, то все функции и переменные, по
умолчанию являются закрытыми.
Обычно, приватными делают все свойства класса, а публичными — его методы.
Все действия с закрытыми свойствами класса реализуются через его методы.
Слайд 32Модификаторы доступа public и private
class Students {
public:
// Установка среднего балла
void
set_average_ball(float ball)
{
average_ball = ball;
}
// Получение среднего балла
float get_average_ball()
Слайд 33Модификаторы доступа public и private
{
return average_ball;
}
std::string
name;
std::string last_name;
int scores[5];
private:
float average_ball;
};
Слайд 34Модификаторы доступа public и private
Напрямую нельзя обращаться к закрытым данными
класса. Работать с этими данными можно только посредством методов этого
класса.
Функция get_average_ball() для получения средней оценки студента, и set_average_ball() для выставления этой оценки.
Слайд 35Модификаторы доступа public и private
Функция set_average_ball() принимает средний балл в качестве параметра
и присваивает его значение закрытой переменной average_ball. Функция get_average_ball() просто возвращает значение этой
переменной.
Слайд 36Программа учета успеваемости студентов
1) Создается заголовочный файл students.h, в котором будет
находиться класс Students.
/* students.h */
#include
class Students {
public:
// Установка имени студента
void set_name(std::string student_name)
Слайд 37Программа учета успеваемости студентов
{ name
= student_name;
}
//
Получение имени студента
std::string get_name()
{
return name;
}
// Установка фамилии студента
void set_last_name(std::string student_last_name)
Слайд 38Программа учета успеваемости студентов
{ last_name
= student_last_name;
}
//
Получение фамилии студента
std::string get_last_name()
{
return last_name;
}
// Установка промежуточных оценок
void set_scores(int student_scores[])
Слайд 39Программа учета успеваемости студентов
{ for
(int i = 0; i < 5; ++i) {
scores[i] = student_scores[i];
}
}
// Установка среднего балла
void set_average_ball(float ball)
{
average_ball = ball;
}
Слайд 40Программа учета успеваемости студентов
// Получение среднего балла
float get_average_ball()
{
return average_ball;
}
Слайд 41Программа учета успеваемости студентов
private:
// Промежуточные оценки
int scores[5];
// Средний
балл
float average_ball;
// Имя
std::string name;
// Фамилия
std::string last_name;
};
Слайд 42Программа учета успеваемости студентов
В класс добавлены новые методы, а также
сделаны приватными все его свойства. Функция set_name() сохраняет имя студента в переменной name,
а get_name() возвращает значение этой переменной. Принцип работы функций set_last_name() и get_last_name()
аналогичен.
Функция set_scores() принимает массив с промежуточными оценками и сохраняет их в приватную переменную int scores[5].
Слайд 43Программа учета успеваемости студентов
Теперь создется файл main.cpp со следующим содержимым.
/* main.cpp */
#include
#include "students.h"
int main()
{
// Создание объекта класса Student
Students student;
Слайд 44Программа учета успеваемости студентов
std::string name;
std::string last_name;
// Ввод имени с клавиатуры
std::cout
";
getline(std::cin, name);
// Ввод фамилии
std::cout << "Last name: ";
getline(std::cin, last_name);
Слайд 45Программа учета успеваемости студентов
// Сохранение имени и фамилии
в объект класса Students
student.set_name(name);
student.set_last_name(last_name);
//
Оценки
int scores[5];
// Сумма всех оценок
int sum = 0;
Слайд 46Программа учета успеваемости студентов
// Ввод промежуточных оценок
for (int i = 0; i < 5;
++i) {
std::cout << "Score " << i+1 << ": ";
std::cin >> scores[i];
// суммирование
sum += scores[i];
}
Слайд 47Программа учета успеваемости студентов
// Сохраняем промежуточные оценки
в объект класса Student
student.set_scores(scores);
// Считаем средний
балл
float average_ball = sum / 5.0;
// Сохраняем средний балл в объект класса Students
student.set_average_ball(average_ball);
Слайд 48Программа учета успеваемости студентов
// Выводим данные по
студенту
std::cout
<< " "
<< student.get_last_name() << " is "
<< student.get_average_ball() << std::endl;
return 0;
}
Слайд 49Программа учета успеваемости студентов
В самом начале программы создается объект класса Students.
Класс Students является описанием любого из студентов, у которого есть имя, фамилия
и возможность получения оценок.
Объект класса Students характеризует конкретного студента. Если мы захотим выставить оценки всем ученикам в группе, то будем создавать новый объект для каждого из них.
Слайд 50Программа учета успеваемости студентов
После создания объекта student, мы вводим с клавиатуры
фамилию, имя и промежуточные оценки для конкретного ученика.
Введенные данные мы
передаем set-функциям, которые присваивают их закрытым переменным класса. После того, как были введены промежуточные оценки, мы высчитываем средний балл на основе этих оценок, а затем сохраняем это значение в закрытом свойстве average_ball, с помощью функции set_average_ball().