Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Законченный проект программы со связанным списком и всеми (семью) характеристиками ООП. Производные классы-потомки.

Читайте также:
  1. D. Программы использования
  2. I «Волевые* метапрограммы_________________________ 161
  3. II. Класифікація витрат проектної організації
  4. II. Модульное структурирование содержания образовательной программы
  5. II. Порядок формирования экспертных групп, организация экспертизы заявленных на Конкурс проектов и регламент работы Конкурсной комиссии
  6. II. Предыстория и основная идея проекта (глава)
  7. II. Требования к структуре образовательной программы дошкольного образования и ее объему

// ПОДКЛАСС ИЛИ ПРОИЗВОДНЫЙ КЛАСС -Торговые агенты

class salespersons: public NNR

{ friend class payroll_list;

private:

float disk_sales; float comm_rate;

public:

salespersons(char *lname, char *fname, char *ss, char *job, int y_hired,

float d_sales, float c_rate): NNR(lname, fname, ss, job, y_hired)

{ disk_sales = d_sales;

comm_rate = c_rate; }

В приведенном фрагменте описывается один класс-потомок, salespersons (торговые агенты), содержащий сведения, общие для всех четырех производных классов. Данные классы-потомки порождаются в соответствии с объектно-ориентированной концепцией наследования.

В данном случае класс-потомок salespersons содержит информацию, добавляемую к сведениям, уже имеющимся в родительском классе. В этом классе формируются структура, содержащая фамилию и имя сотрудника, номер социальной страховки, стаж работы, общий заработок и соответствующий процент комиссионных.

Теперь рассмотрим остальную часть описания класса-потомка:

 

void fill_saless(float d_sales)

{ disk_sales = d_sales;}

void fill_comm_rate(float c_rate)

{ comm_rate = c_rate; }

void add_info()

{ pointer = this; }

void send_info()

{ NNR:: send_info();

cout << "\n Sales (disk): " << disk_sales; // Объем продаж

cout << "\n Commission Rate: " << comm_rate; // Коммиссионные

}};

Для выделения памяти для каждого дополнительного элемента связанного списка в функции add_info() используется не операция динамического распределения памяти new, а указатель на объект this. Этому указателю присваивается адрес элемента класса NNR.

  Законченный проект программы со связанным списком и всеми (семью) характеристиками ООП. Использование дружественного класса.

дружественные классы позволяют ограниченно предоставить прямой доступ к защищенным полям класса, не нарушая при этом принципов инкапсуляции. Любой метод класса, дружественного некоторому классу, также имеет полный доступ к его полям и методам.

При описании класса требуется специальным образом перечислить все дружественные функции и все дружественные классы.

Для указания дружественных функций и классов используется ключевое слово friend.

Все методы дружественного класса, могут обращаться ко всем элементам класса, включая элементы, объявленные как private и protect.

Для объявления дружественного класса достаточно после ключевого слова friend записать имя класса:

class ИмяКласса {

...

friend class ИмяДружественногоКласса;

...

};

Так, например, в предыдущем примере вы могли бы определить, что класс point является дружественным классу line. Все методы класса point могут обращаться к любым элемента класса line.

 

//==========================================================

// Класс point

class point

{

//...

};

 

//==========================================================

// Класс line

class line

{

public:

// Класс point объявляется дружественным классу line

friend class point; };

37. Важнейшие библиотеки С и C++. Заголовочные файлы Microsoft С и C++. Стандартные функции общего назначения (stdlib.h). Преобразование данных. Преобразование числа с плавающей точкой в строку. Преобразование строки в длинное целое.

Заголовочный файл Содержание
bios.h* Прерывания BIOS
conio.h Ввод-вывод на консоль и в порты
ctype.h Символьные функции
dos.h* Прерывания DOS
io.h Работа с файлами и ввод-вывод на нижнем уровне
math.h* Математические функции
stdio.h Потоковый ввод-вывод для С
stdlib.h* Стандартные функции общего назначения
iostream.h Потоковый ввод/вывод для С++
string.h* Строковые функции
time.h* Работа с датой и временем

заголовочные файлы — основной способ подключить к программе типы данных, структуры, прототипы функций, перечислимые типы, и макросы, используемые в другом модуле. Имеет по умолчанию расширение.h; иногда для заголовочных файлов языка C++ используют расширение.hpp. Чтобы избежать повторного включения одного и того же кода, используются директивы #ifndef, #define, #endif.

Преимущество заголовочных файлов в первую очередь в упрощении компилятора: без заголовочных файлов компилятор и компоновщик делают одну и ту же работу, проверяя, есть ли в модуле Y откомпилированная функция X.

Если модуль правильно написан, с помощью условной компиляции можно отключить часть его функциональности.

Заголовочный файл позволяет задать то, что невозможно задать с помощью модулей — подстановки с помощью #define, директивы компилятора, незаконченные синтаксические конструкции…

Недостатки

Заголовочные файлы намного медленнее — чтобы откомпилировать 10 c-файлов, к каждому из которых подключён длинный h-файл, компилятору придётся пройти по заголовку 10 раз. Чтобы справиться с этой проблемой, во многих компиляторах используют предварительно откомпилированные заголовки.

Заголовочные файлы вместе с некоторыми объектами языка C++ (константы, inline-функции, шаблоны, static-переменные) образуют тяжеловесные конструкции.


Дата добавления: 2015-12-08; просмотров: 57 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.009 сек.)