Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 22
На сайте нет зарегистрированных пользователей

Пользователей: 13,361
новичок: uehuat
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование работы обрабатывающего участка цеха в GPSS
Расчет обратной матрицы на Delphi + Пояснительная записка
Моделирование автомойки на GPSS + Отчет + Блок схемы

Лабораторное занятие №2. Специальные функции-элементы класса.
Специальные функции-элементы относятся к некоторым функциям класса, от
которых зависят способы создания, копирования, преобразования и
уничтожения представителей (объектов) класса. Часто эти функции неявно
вызываются компилятором. Следующий список даёт краткое описание этих
функций.
Лабораторное занятие №2. Специальные функции-элементы  класса.
Конструктор
Конструктор является функцией-элементом с тем же именем, что и её класс.
Она вызывается компилятором всегда, когда создаётся объект (экземпляр)
класса. Если Вы не определили ни одного конструктора, компилятор
генерирует конструктор по умолчанию (не имеющий параметров). Для
конструкторов выполняются следующие правила:
• для конструктора не указывается тип возвращаемого значения,
• конструктор не наследуется,
• Конструктор не может быть объявлен как const, volatile, virtual или static.




10 Объектно-ориентированное программирование на С++.














Пример №1. Определение конструктора класса.

class Point
{
private:
int x; int y;
public:
Point() // конструктор класса
{
x = 0; y = 0; // задание начальных значений координат
}
};



Задание №1
Определить конструкторы класса в классах «Прямоугольник» и «Точка»,
разработанных на практическом занятии №1.
Конструктор копии
Конструктор копии является конструктором специального вида: он
воспринимает в качестве аргумента константную ссылку на объект класса
(const тип_класса&) или простую ссылку на объект (тип_класса&). Если вы не
определите собственный конструктор копирования, компилятор реализует
свой, выполняющий побитовое копирование классов.

















Пример №2. Определение конструктора копирования.

class Point
{
private:
int x; int y;
public:
Point(const Point& srcPoint) // конструктор копии
{
x = srcPoint.x
y = srcPoint.y
}
};





11 Объектно-ориентированное программирование на С++.
Задание №2
Определить конструкторы копирования в классах «Прямоугольник» и «Точка»,
разработанных на практическом занятии №1.
Операция присваивания
Операция присваивания является функцией-элементом с именем operator=,
который воспринимает единственный аргумент типа const тип_класса& (или
тип_класса&).
Операция присваивания вызывается компилятором, когда объекту
присваивается значение другого объекта. Компилятор генерирует
присваивание по умолчанию, если вы не определили операцию присваивания.
Присваивание по умолчанию производит побитовое копирование.

















Пример №3. Определение операции присваивания.

class Point
{
private:
int x; int y;
public:
Point & operator = (const Point& Point)
{
Point::x = Point.x;
Point::y = Point.y;
return *this;
}
};




Задание №3
Определите операцию присваивания для классов «Точка» и «Прямоугольник»,
разработанных на практическом занятии №1.
Деструктор
Деструктор является дополнением конструктора. Он имеет то же имя, что и
класс, но с префиксом-тильдой (~). Он вызывается всякий раз, когда
уничтожается представитель класса. Для деструктора существует следующие
правила:
• Деструктор не может иметь аргументов.
• Деструктор не может возвращать значение.
• Деструктор не наследуется.
12 Объектно-ориентированное программирование на С++.
• Деструктор не может быть объявлен как const, volatile или static.
• Деструктор может быть объявлен как virtual.

Компилятор генерирует деструктор по умолчанию, если вы его не определяете.


!!! Всегда определяйте деструктор как virtual !!!



















Пример №4. Определение деструктора.
Класс Line (линия) задан двумя точками.

class Line
{
private:
Point* m_p1;
Point* m_p2;
public:
virtual ~Line()
{
// m_p1, m_p2 должны быть созданы в конструкторе посредством new
delete m_p1;
delete m_p2;
}
};




Задание №4
Определите новый класс «Треугольник», заданный тремя точками на
координатной оси. Объявите конструктор по умолчанию, конструктор
копирования и операцию присваивания. Определите виртуальный деструктор
класса, разрушающий объекты класса «Точка» (объекты класса «Точка»
должны создаваться динамический посредством оператора new).
Функции преобразования
Представители класса могут быть преобразованы к другому типу с помощью
конструкторов преобразования или операции приведения.
Конструкторы преобразований
Если конструктор класса A воспринимает единственный аргумент типа B, то
говорят, что В может быть приведён к А с помощью преобразования
конструктором.
13 Объектно-ориентированное программирование на С++.
Операции приведения
Вы можете определить функции-элементы, которые будут осуществлять явное
преобразование типа класса к другому типу. Эти функции называют
операциями приведения.

operator <имя_нового_типа()>;
Операции преобразования подчиняются следующим правилам:
• Процедура преобразования не имеет аргументов.
• Процедура преобразования не имеет явной спецификации типа
возвращаемого значения.
• Процедура преобразования может описываться как virtual.
• Процедура преобразования наследуется.

















Пример №5. Определение конструктора преобразования и операции
приведения.

class String
{
char m_str[100];
public:
String(const char* str) // Конструктор преобразования
{
strcpy(m_str, str);
}
operator char*() // Оператор преобразования
{
return m_str;
}
};

main()
{
String str("Hello, world");
cout << (char*)(str) << endl;
return 0;
}



14 Объектно-ориентированное программирование на С++.
Задание №5
Расширьте класс «String» (строка) из примера №5 для поддержки
конструктора копирования, конструктора инициализации (определите его как
String(int Length)) и конструктора по умолчанию. Воспользуйтесь
динамическим выделением памяти под строку (т.е. замените char m_str[100]
на char* m_str). Определите виртуальный деструктор, освобождающий
выделенную память под строку. Обеспечьте конструктор и операцию
преобразования строки для типа int.

Задание №5
Авиакомпания осуществляет рейсы, характеризующиеся: номером рейса,
аэропортом назначения, ценой за билет. Билеты продаются на определённый
рейс и характеризуются следующим: датой отправления, именем пассажира,
номером посадочного места. Система должна иметь возможность продать
билет (добавить) и сдать билет (удалить). Разработайте классы для
реализации данной задачи. Предусмотрите для каждого класса все виды
конструкторов, деструктор.
Опубликовал Kest February 24 2014 17:24:24 · 0 Комментариев · 3575 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Аватары в комме...
Illusion
Разработка Web-пр...
Converter AMR<->W...
PCXReader. Програ...
IpEditAdress
Delphi 2005 Учимс...
С/C++ Программиро...
SysInfo [Исходник...
WinPopup
Пример работы с р...
Zoom [Исходник на...
Язык программиров...
PDF
Файловый менеджер
TDBF
Панель случайной ...
ScreenSaver [Исхо...
Архив программ
Adapter (пример D...

Топ загрузок
Приложение Клие... 100772
Delphi 7 Enterp... 97809
Converter AMR<-... 20259
GPSS World Stud... 17014
Borland C++Buil... 14189
Borland Delphi ... 10267
Turbo Pascal fo... 7372
Калькулятор [Ис... 5972
Visual Studio 2... 5206
Microsoft SQL S... 3661
Случайные статьи
Конструктор с пров...
8.7. Задачи
Резервное копирова...
Шаг к реализации с...
Игровые автоматы. ...
АНТИПАТТЕРНЫ ЗАПРОСОВ
УПРОЩЕНИЕ МОДЕЛЕЙ ...
Лучшие игры в кази...
Область Selection
Контроллер от NES,...
Контейнер из библи...
Об анализе задачи....
сообщений электрон...
Некоторые пытаются...
Определение шаблон...
Однако нужная поло...
Запрограммировать ...
расположены в разн...
Пример кода програ...
Пространство имен
Онлайн казино Netgame
Конструктор Remote...
Для выбора лучшего...
Шаблон типа regex
Программа складыва...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?