Читайте также:
|
|
// ПОДКЛАСС ИЛИ ПРОИЗВОДНЫЙ КЛАСС -Торговые агенты
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 | Нарушение авторских прав