Similar presentations:
Классы С++
1. Классы С++
Воронова С.А.2.
3.
Классы и объекты в С++ являются основнымиконцепциями объектно-ориентированного
программирования — ООП.
Объектно-ориентированное программирование —
расширение структурного программирования, в
котором основными концепциями являются понятия
классов и объектов.
Основное отличие языка программирования С++ от С
состоит в том, что в С нет классов, а следовательно
язык С не поддерживает ООП, в отличие от С++.
4. Определение класса
Классы — этонекоторые описания,
схемы, чертежи по
которым создаются
объекты.
5.
Классы имеют свои функции, которые называютсяметодами класса.
Передвижение велосипеда осуществляется за счёт
вращения педалей, если рассматривать велосипед с
точки зрения ООП, то механизм вращения педалей —
это метод класса.
6.
Каждый велосипед имеет свой цвет, вес, различные составляющие —всё это свойства. Причём у каждого созданного объекта свойства могут
различаться. Имея один класс, можно создать неограниченно
количество объектов (велосипедов), каждый из которых будет обладать
одинаковым набором методов, при этом можно не задумываться о
внутренней реализации механизма вращения педалей, колёс,
срабатывания системы торможения, так как всё это уже будет
определено в классе.
7. Классы в С++
• Классы в С++ — это абстракция описывающаяметоды, свойства, ещё не существующих
объектов.
• Объекты — конкретное представление
абстракции, имеющее свои свойства и
методы. Созданные объекты на основе одного
класса называются экземплярами этого класса.
Эти объекты могут иметь различное
поведение, свойства, но все равно будут
являться объектами одного класса.
8. Структура объявления классов
// объявление классов в С++class /*имя класса*/
{
private:
/* список свойств и методов для использования внутри
класса */
public:
/* список методов доступных другим функциям и
объектам программы */
protected:
/*список средств, доступных при наследовании*/
};
9. Пример программы
// classes.cpp: определяет точку входа для консольногоприложения.
#include <iostream>
using namespace std;
// начало объявления класса
class CppStudio // имя класса
{
public: // спецификатор доступа
void message() // функция (метод класса) выводящая
сообщение на экран
10. Продолжение программы
{Продолжение программы
cout << "website: cppstudio.com\ntheme: Classes
and Objects in C + +\n";
}
}; // конец объявления класса CppStudio
int main(int argc, char* argv[])
{
CppStudio objMessage; // объявление объекта
objMessage.message(); // вызов функции класса
message
system("pause");
return 0;
}
11.
Результат выполнения программы:12. SET и GET — функции классов
Атрибуты объекта хранятся в переменных,объявленных внутри класса, которому
принадлежит данный объект. Причём,
объявление переменных должно выполняться
со спецификатором доступа private. Такие
переменные называются элементами данных.
set и get функции позволяют манипулировать
элементами данных
13. SET и GET — функции классов
set-функции инициализируют элементыданных, get-функции позволяют просмотреть
значения элементов данных.
Доработаем класс CppStudio так, чтобы в нём
можно было хранить дату в формате дд.мм.гг.
Для изменения и просмотра даты реализуем
соответственно set и get функции.
14. Пример класса CppStudio
Пример класса CppStudio// classes.cpp: определяет точку входа для консольного
приложения.
#include <iostream>
using namespace std;
class CppStudio // имя класса
{
private: // спецификатор доступа private
int day, // день
month, // месяц
year; // год
public: // спецификатор доступа public
void message() // функция (метод класса) выводящая
сообщение на экран
15. Пример класса CppStudio
Пример класса CppStudio{
cout << "\nwebsite: cppstudio.comntheme: Classes and
Objects in C + +\n";
}
void setDate(int date_day, int date_month, int date_year) //
установка даты в формате дд.мм.гг
{
day = date_day; // инициализация день
month = date_month; // инициализация месяц
year = date_year; // инициализация год
}
16. Пример класса CppStudio
Пример класса CppStudiovoid getDate() // отобразить текущую дату
{
cout << "Date: " << day << "." << month << "." << year
<< endl;
}
}; // конец объявления класса CppStudio
int main(int argc, char* argv[])
{
setlocale(LC_ALL, "rus"); // установка локали
17. Пример класса CppStudio
Пример класса CppStudioint day, month, year;
cout << "Введите текущий день месяц и год!\n";
cout << "день: "; cin >> day;
cout << "месяц: "; cin >> month;
cout << "год: "; cin >> year;
CppStudio objCppstudio; // объявление объекта
objCppstudio.message(); // вызов функции класса message
objCppstudio.setDate(day, month, year); // инициализация
даты
objCppstudio.getDate(); // отобразить дату
system("pause");
return 0;
}
18.
Результат выполнения программы:19. Конструктор
Конструктор — специальная функция, котораявыполняет начальную инициализацию элементов
данных, причём имя конструктора обязательно
должно совпадать с именем класса. Важным отличием
конструктора от остальных функций является то, что
он не возвращает значений вообще никаких, в том
числе и void.
В любом классе должен быть конструктор, даже если
явным образом конструктор не объявлен, то
компилятор предоставляет конструктор по
умолчанию, без параметров.
20. Доработанная программа
// classes.cpp: определяет точку входа для консольногоприложения.
#include <iostream>
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 << "\nwebsite: cppstudio.com\ntheme: 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 << "date: " << 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 шага:1. добавить в проект заголовочный файл *.h;
2. в заголовочном файле объявить
пользовательский класс,
в нашем случае — 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 <string>
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 <iostream>
#include "students.h"
int main()
{
// Создание объекта класса Student
Students student;
44. Программа учета успеваемости студентов
std::string name;std::string last_name;
// Ввод имени с клавиатуры
std::cout << "Name: ";
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 << "Average ball for " <<
student.get_name() << " "
<< 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().