- •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.5. Определение методов вне класса
//Лабораторная работа № 20
//Определение методов вне класса
//Вариант № 30
//Задание 3-5
//Выполнила ст. Петрова А.А.
#include <iostream> // for cin cout
#include <conio.h>
using namespace std;
class CBox // объявление класса
{ // по умолчанию спецификатор доступа private
double m_length; // поле - длина
double m_width; // поле - ширина
double m_height; // поле - высота
public:
// конструктор для инициализации полей значениями =0
CBox();
// перегруженный конструктор для инициализации двух
// полей значениями, третье поле инициализируется 0
CBox(double l,double w);
// перегруженный конструктор для инициализации полей
CBox(double l, double w, double h);
~CBox (); // деструктор
void Print ()
{ cout <<" L = "<< m_length << " W = "<< m_width <<
" H = "<<m_height<<endl;
}
double Volume( )
{ return m_length * m_width * m_height; }
};
// определение конструкторов вне класса
CBox:: CBox() : m_length(0), m_width(0), m_height(0) { }
CBox::CBox(double l,double w):
m_length(l), m_width(w), m_height(0) { }
CBox:: CBox(double l, double w, double h):
m_length(l), m_width(w), m_height(h){ }
// деструктор
CBox:: ~CBox ()
{cout << "destructor CBox done"<<endl; }
int main()
{
//вызов конструктора для инициализации полей значениями 0 0 0
CBox mybox1;
mybox1.Print();
//вызов конструктора для инициализации полей значениями 1 2 3
CBox mybox2(1, 2, 3);
mybox2.Print();
//вызов конструктора для инициализации полей значениями 1 2 0
CBox mybox3(1, 2);
mybox3.Print();
// вызов стандартного конструктора копирования
CBox mybox4 = mybox2;
mybox4.Print();
// вызов стандартного конструктора копирования
mybox1 = mybox2;
mybox1.Print();
cout << "\nНажмите любую клавишу..." ;
getch();
return 0;
} // вызов деструктора
Тестирование
2.4.3.3.6. Конcтантные поля, методы и объекты
//Лабораторная работа № 20
//Конcтантные поля, методы и объекты
//Вариант № 30
//Задание 3-6
//Выполнила ст. Петрова А.А.
#include <iostream> // for cin cout
#include <conio.h>
using namespace std;
class CBox // объявление класса
{
double m_length; // поле - длина
double m_width; // поле - ширина
double m_height; // поле - высота
// инициализируется конструктором нельзя изменить методом
const int n; // число размерностей
public:
CBox();//конструктор для инициализации полей значениями =0
CBox(double l,double w); // перегруженные конструкторы
CBox(double l, double w, double h);
~CBox (); // деструктор
void Set_l(double l) { m_length = l;}
void Set_w(double w) { m_width = w;}
void Set_h(double h) { m_height = h;}
// константные методы не могут изменять поля класса
double Get_l() const { return m_length;}
double Get_w() const { return m_width;}
double Get_h() const { return m_height;}
void Print () const
{cout<< n << " L = " << m_length << " W = " << m_width <<
" H = "<< m_height << endl; }
double Volume( ) const
{ return m_length * m_width * m_height; }
};
// в определении конструкторов
// обязательна инициализация поля-константы
CBox:: CBox() :
m_length(0), m_width(0), m_height(0),n(3) { }
CBox:: CBox(double l,double w):
m_length(l), m_width(w), m_height(0),n(3) { }
CBox:: CBox(double l, double w, double h) :
m_length(l), m_width(w), m_height(h),n(3){
}
CBox:: ~CBox () // деструктор
{ cout << "destructor CBox done"<<endl; }
int main()
{
CBox mybox1(1, 2, 3);
mybox1.Print ();
mybox1.Set_l (4);
mybox1.Print();
cout<< mybox1.Get_l() <<endl;
const CBox mybox2(5, 6, 7); // константный объект
// mybox2.Print(); // запрещено !!!
// mybox2.Set_l(4); // запрещено !!!
// mybox2.Print(); // запрещено !!!
// cout<<mybox2.Get_l()<<endl; // запрещено !!
CBox mybox3 = mybox2; // но !!!
mybox3.Print();
cout << "\nНажмите любую клавишу..." ;
getch();
return 0;
}
Тестирование