- •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
1.17.1. Данные-элементы
Данные-элементы классов С++ идентичны элементам структур языка С++ с некоторыми дополнениями:
данными-элементами могут быть перечислимые типы, битовые поля или представители ранее объявленного класса. Также допускается вложенное объявление перечислимого типа данных и создание псевдонимов с помощью typedef;
данное-элемент класса может быть указателем или ссылкой на представитель этого класса.
1.17.2. Элементы-функции
Функция-элемент является функцией, объявленной (описанной) внутри определения класса. Тело функции может также определяться внутри определения класса, в этом случае функция называется встроенной (inline) функцией-элементом. Когда тело функции определяется вне тела класса, перед именем функции ставится префикс из имени класса и операции разрешения видимости (::).
Пример 20.21.
class str
{ char *s; // указатель на строку
public:
str(char *word) // встроенный конструктор
{ s=new char[strlen(word)+1];
strcpy(s, word);
};
~str()
{ delete [ ]s; }; // встроенный деструктор
void write(); // объявление функции-элемента
};
void str::write() // определение функции-элемента
{ cout<<s);
};
1.17.3. Доступ к данным-элементам
В определяемые объекты входят данные, соответствующие членам - данным класса. Функции - члены класса позволяют обрабатывать данные конкретных объектов класса. Обращаться к данным объекта и вызывать функции для объекта можно двумя способами. Первый с помощью “квалифицированных” имен:
имя_объекта. имя_данного
имя_объекта. имя_функции
Например:
complex x1,x2;
x1.re = 1.24;
x1.im = 2.3;
x2.set(5.1,1.7);
x1.print();
Второй способ доступа использует указатель на объект
указатель_на_объект–>имя_компонента
complex *point = &x1; // или point = new complex;
point –>re = 1.24;
point –>im = 2.3;
point –>print();
Доступ к членам – аналогично структурам
mybox1.m_length = 2.5;
mybox2.m_width = mybox1.m_length;
pmybox->m_height = mybox1.m_length;
pmybox->m_length = pmybox->m_height ;
Функции-элементы находятся в области действия класса, в котором они определены. Т.о. они могут обращаться к любому элементу класса, используя просто имя переменной. Обычные функции или функции-элементы другого класса могут получить доступ к элементам-данным с помощью операции . или >, применяемых к представителю или указателю на представитель класса.
Пример 20.22.
class coord
{ public: int x, y; // координаты x и y
};
void main()
{ coord org; // представитель класса координат
coord *orgptr = &org; // указатель на представитель класса
org.x = 0; // задание значения координаты x
orgptr>y = 0; // задание значения координаты y
}
1.17.4. Вызов функций-элементов
Функции-элементы класса могут вызывать другие функции-элементы того же класса, используя имя функции.
Пример 20.23.
class coord
{ int x, y; // координаты x и y
public:
void setcoord(int _x, int _y)
// функция задания значений координат
{ x =_x; y =_y;
};
void getcoord(int &_x, int &_y)
//функция получения значений координат
{_x = x; _y = y;};
};
void main()
{ coord org; // представитель класса координат
coord *orgptr = &org; // указатель на представитель класса
org.setcoord(10, 10); // вызов функции-элемента
// задания значений
int col, row;
orgptr>getcoord(col, row); // вызов функции-элемента
// получения значений координат
}