русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Наследование и спецификаторы доступа


Дата добавления: 2013-12-23; просмотров: 932; Нарушение авторских прав


Глава 5. Наследование, виртуальные функции и полиморфизм

Создание функций преобразования типов

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

operator(тип)() {return значение;}

Здесь тип является целевым типом, к которому преобразуется класс, а значение представляет со­бой значение класса после преобразования. Функция преобразования должна быть членом клас­са, для которого она определяется.

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

operator int() { return x*у*z; }

Ниже приведена программа, иллюстрирующая работу этой функции преобразования:

#include <iostream.h>

class point

{

int x, у, z; // трехмерные координаты

public:

point(int a, int b, int c) { x=a; y=b, z=c; }

point operator+(point op2);

operator int() { return x*y*z; }

};

point point::operator+(point op2)

{

point temp(0, 0, 0);

temp.x = x+op2.x; temp.у = y+op2.y; temp.z = z+op2.z;

return temp;
}

int main()

{

point a(1, 2, 3), b(2, 3, 4);



cout << b+100; // вывод 124 из-за преобразования к int

cout << "\n";

return 0;

}

Как иллюстрирует данная программа, когда объект point используется в целочисленном выражении, таком как cout << b+100, используется функция преобразования объекта. В этом случае функция преобразования возвращает значение 24, которое затем прибавляется к 100.

 

Наследование и полиморфизм лежат в основе объектно-ориентированного программирования. С помощью наследования можно создать общий класс, определяющий общие черты совокупности объектов. Этот класс может наследоваться другими более специфическими классами, каждый из которых добавляет что-то свое.

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

В C++ полиморфизм поддерживается как на этапе исполнения программы, так и на этапе компиляции. В качестве примера полиморфизма на этапе компиляции можно указать перегрузку операторов и функций. Но как бы ни была полезна перегрузка операторов и функций, с их помощью нельзя решить все задачи, возникающие в объектно-ориентированном программировании. Поэтому в C++ также используют полиморфизм времени выполнения программы, для чего используются производные классы и виртуальные функции. Связанные с ними вопросы обсуждаются в этой главе. Начнем главу с подробного рассмотрения наследования.

В этом разделе мы изучим взаимодействие между спецификаторами доступа C++ и наследовани­ем. Прежде всего, необходимо коснуться терминологии. Класс, от которого наследуется другой клас­с, называется базовым классом. Иногда его также называют родительским классом. Класс, вы­полняющий наследование, называется производным классом или потомком.



<== предыдущая лекция | следующая лекция ==>
Использование ссылок для перегрузки унарных операторов | Спецификаторы доступа


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.