- •1. Краткие теоретические сведения
- •1.1. Объектно-ориентированный подход-Бузюков
- •1.2. Этапы разработки ооп систем
- •1.3. Декомпозиция
- •1.5. Концепции ооп
- •1.6. Синтаксис объявления класса
- •1.7. Методы класса
- •1.8. Объявление объектов
- •1.9. Конструктор
- •1.10. Деструктор
- •1.11. Инкапсуляция
- •1.12. Полиморфизм
- •1.13. Указатель this
- •1.14. Статические члены класса
- •1.15. Дружественные функции и классы
- •1.16. Вложенные классы
- •1.17. Элементы класса
- •1.17.1. Данные-элементы
- •1.17.2. Элементы-функции
- •1.17.3. Доступ к данным-элементам
- •1.17.4. Вызов функций-элементов
- •1.17.5. Указатели на компоненты-функции.
- •2. Задание
- •2.4.1.2. Пример для варианта 30
- •2.4.1.2.1. Разработка алгоритма решения.
- •2.4.1.2.2. Описание структуры класса.
- •2.4.1.2.2.1. Описание полей класса.
- •2.4.1.2.2.2. Функции-аксессоры.
- •2.4.1.3. Программа
- •2.4.1.4. Тестирование
- •2.4.2. Задание 2. Простейшие классы и объекты
- •2.4.2.1. Условие задания
- •2.4.2.2. Пример
- •2.4.2.3. Программа
- •2.4.2.4. Тестирование
- •2.4.3. Задание 3. Простейший класс. Объединение данных и методов
- •2.4.3.1. Условие задания
- •2.4.3.2. Пример
- •2.4.3.3. Программы
- •2.4.3.3.1. Первый принцип инкапсуляции: объединение данных и методов
- •2.4.3.3.2. Второй принцип инкапсуляции: защита от внешнего вмешательства
- •2.4.3.3.3. Независимость интерфейса от реализации
- •2.4.3.3.4. Конструктор, деструктор
- •2.4.3.3.5. Определение методов вне класса
- •2.4.3.3.6. Конcтантные поля, методы и объекты
- •2.4.3.4. Тестирование
- •2.4.4. Задание 4. Пользовательский класс
- •2.4.4.1. Условие задания
- •2.4.4.2. Методические указания.
- •1. Пример определения класса.
- •2. Пример реализации конструктора с выдачей сообщения.
- •3. Выводы
- •4. Требование к отчету
- •4. Краткие теоретические сведения.
- •5. Вопросы для самоконтроля
- •Литература
- •1. Краткие теоретические сведения 2
- •1.1. Объектно-ориентированный подход-Бузюков 2
2.4.3.3.2. Второй принцип инкапсуляции: защита от внешнего вмешательства
Вариант а. Исходные данные заданы присваиванием
//Лабораторная работа № 20
// Доступ к данным через интерфейс
//Вариант № 30
//Задание 3-2
//Второй принцип инкапсуляции:
//защита от внешнего вмешательства
//Исходные данные заданы присваиванием
//Выполнила ст. Петрова А.А.
#include <iostream.h> // for cin cout
#include <conio.h>
using namespace std;
class CBox // объявление класса
{ // по умолчанию спецификатор доступа private
double m_length; // поле - длина
double m_width; // поле - ширина
double m_height; // поле - высота
public: // спецификатор доступа
// определение методов класса при объявлении
// инициализация полей через методы класса
void Setlength(double sl)
{m_length = sl; }
void Setwidth(double sw)
{m_width = sw; }
void Setheight(double sh)
{m_height = sh; }
// доступ к полям через методы класса
double Getlength()
{return m_length;}
double Getwidth()
{return m_width;}
double Getheight()
{return m_height;}
double Volume( );//объявление метода – вычисление объема
// объявление перегруженного метода для вычисления объема
double Volume(CBox *);
};
// определение метода класса вне объявления класса
double CBox::Volume()
{return m_length * m_width * m_height;}
// определение метода класса Volume()
// для демонстрации указателя this
double CBox::Volume(CBox * )
{return this->m_length * this->m_width * this->m_height;}
int main()
{ // создание статического объекта (экземпляра класса)
CBox mybox1;
// mybox1.m_length = 2; // ошибка !!!
// mybox1.m_width = 3; // ошибка !!!
// mybox1.m_height = 4; // ошибка !!!
// инициализация полей через методы класса
mybox1.Setlength(2);
mybox1.Setwidth (3);
mybox1.Setheight(4);
cout<<mybox1.Getheight()<<" "<< mybox1.Volume()<< endl;
// 4 24
cout << mybox1.Volume(&mybox1) << endl;
// 24
// создание динамического объекта
CBox *pmybox2 = new CBox;
// инициализация полей через методы класса
pmybox2->Setlength(5);
pmybox2->Setwidth(6);
pmybox2->Setheight(7);
cout<<pmybox2->Getlength()<<" "<<pmybox2->Volume()<<endl;
delete pmybox2; // удаление динамического объекта
cout << "\nНажмите любую клавишу..." ;
getch();
return 0;
}
Тестирование – вариант а
Вариант б. Исходные данные заданы вводом
//Лабораторная работа № 20
//Доступ к данным через интерфейс
//Вариант № 30
//Задание 3-2
//Второй принцип инкапсуляции:
//защита от внешнего вмешательства
//Исходные данные заданы вводом
//Выполнила ст. Петрова А.А.
#include <iostream.h> // for cin cout
#include <conio.h>
using namespace std;
class CBox // объявление класса
{ // по умолчанию спецификатор доступа private
double m_length; // поле - длина
double m_width; // поле - ширина
double m_height; // поле - высота
public: // спецификатор доступа
// определение методов класса при объявлении
// инициализация полей через методы класса
void Setlength(double sl)
{m_length = sl; }
void Setwidth(double sw)
{m_width = sw; }
void Setheight(double sh)
{m_height = sh; }
// доступ к полям через методы класса
double Getlength()
{return m_length;}
double Getwidth()
{return m_width;}
double Getheight()
{return m_height;}
double Volume( );//объявление метода – вычисление объема
// объявление перегруженного метода для вычисления объема
double Volume(CBox *);
};
// определение метода класса вне объявления класса
double CBox::Volume()
{return m_length * m_width * m_height;}
// определение метода класса Volume()
// для демонстрации указателя this
double CBox::Volume(CBox * )
{return this->m_length * this->m_width * this->m_height;}
int main()
{ // создание статического объекта (экземпляра класса)
double length; // поле - длина
double width; // поле - ширина
double height; // поле - высота
CBox mybox1;
// mybox1.m_length = 2; // ошибка !!!
// mybox1.m_width = 3; // ошибка !!!
// mybox1.m_height = 4; // ошибка !!!
cout << "Длина = ";cin >> length; //Ввод данных для полей
cout << "Ширина = ";cin >> width;
cout << "Высота = ";cin >> height;
// инициализация полей через методы класса
mybox1.Setlength(length);
mybox1.Setwidth (width);
mybox1.Setheight(height);
cout<<mybox1.Getheight()<<" "<< mybox1.Volume()<< endl;
// 4 24
cout << mybox1.Volume(&mybox1) << endl;
// 24
// создание динамического объекта
CBox *pmybox2 = new CBox;
// инициализация полей через методы класса
cout << "Длина = ";cin >> length; //Ввод данных для полей
cout << "Ширина = ";cin >> width;
cout << "Высота = ";cin >> height;
pmybox2->Setlength(length);
pmybox2->Setwidth(width);
pmybox2->Setheight(height);
cout<<pmybox2->Getlength()<<" "<<pmybox2->Volume()<<endl;
delete pmybox2; // удаление динамического объекта
cout << "\nНажмите любую клавишу..." ;
getch();
return 0;
}
Тестирование – вариант б