Навигация
Главная
Поиск
Форум
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
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Модуль Forms 65535
21 ошибка прогр... 63840
Реклама
Сейчас на сайте
Гостей: 14
На сайте нет зарегистрированных пользователей

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

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

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Лабораторное занятие №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 Февраль 24 2014 21:24:24 · 0 Комментариев · 2838 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
PHP: обучение на ...
Domen Name IP
Формирование отче...
iComm v.6.1 - выв...
Расширенный загру...
Socoban
Averaging [Исходн...
Последние загруж...
Форма в форме
Заставка. Изображ...
Основы Delphi. Пр...
Error mod
Java 2 - Эффектив...
Иллюстрированный ...
Delphi 6 программ...
PDF
PHP5. Профессиона...
AboutSystem
Berg
Применение фильтр...

Топ загрузок
Приложение Клие... 100577
Delphi 7 Enterp... 93888
Converter AMR<-... 20129
GPSS World Stud... 16149
Borland C++Buil... 13495
Borland Delphi ... 9474
Turbo Pascal fo... 7152
Калькулятор [Ис... 5361
Visual Studio 2... 5060
FreeSMS v1.3.1 3580
Случайные статьи
Doorway. Дорвей в ...
Параметризация спи...
Основы архитектуры VM
каталогов полномоч...
Нам нужны достаточ...
14.2. Две важные ф...
Кадры, флаги и поля
Когда винты вынуты
Линии границы
Замена подстроки с...
• Negotiate Securi...
Как защитить сайт ...
Пространство имен
Аргументы конструк...
Методы класса
Два всадника на од...
собственно создани...
ГЛАВА 7. ЕЩЕ НЕСК...
Элементы управлени...
Fall Control Super...
Доставка и обработ...
Простой графически...
Как мне пометить с...
Создание справки к...
Пассивные интерфей...
Статистика



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


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