русс | укр

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

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

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

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


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

СОЗДАНИЕ ПОЛИМОРФНОГО ОБЪЕКТА-ТЕЛЕФОНА


Дата добавления: 2015-07-09; просмотров: 487; Нарушение авторских прав


 

Для того, чтобы ваш объект-телефон мог эмулировать дисковый, кнопочный или платный телефон на выбор необходимо использовать полиморфный объект. Другими словами, для одного звонка объект-телефон мог бы представлять кнопочный аппарат, для другого выступал бы как платный телефон и т.д. Иначе говоря, от одного звонка к другому ваш объект-телефон должен изменять форму.

 

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

 

class phone {

public:

virtual void dial(char *number) {cout<<”Connecting...”<<endl;}

phone(char *number) { strcpy(phone::number, number); };

protected:

char number[13] ;

};

Далее в программе создается указатель на объект базового класса. Для вашей телефонной программы вы создадите указатель на базовый класс phone:

 

phone *poly_phone;

touch_tone telephone("555-1212");

 

Для изменения формы объекта вы просто присваиваете этому указателю адрес объекта производного класса, как показано ниже:

 

poly_phone = (phone *) &telephone;

 

Символы (phone *), которые следуют за оператором присваивания, являются оператором приведения типов, который сообщает компилятору C++, что все в порядке, необходимо присвоить адрес переменной одного типа (touch_tone) указателю на переменную другого типа (phone). Поскольку ваша программа может присваивать указателю объекта poly_phone адреса различных объектов, то этот объект может изменять форму, а следовательно, является полиморфным. Следующая программа использует этот метод для создания объекта-телефона. После запуска программы объект poly_phone меняет форму с дискового телефона на кнопочный, а затем на платный:



#include <stdio.h>

#include <iostream.h>

#include <conio.h>

#pragma argsused

class phone {

public:

virtual void dial(char *number) {cout<<"Connecting..."<<endl;}

phone(char *number) { strcpy(phone::number, number); };

protected:

char number[13] ;

};

class touch_tone : phone {

public:

void dial(char * number){ cout<<"Connecting by touch_tone..."<<endl;}

touch_tone(char *number) : phone(number){ }

};

class pay_phone: phone {

public:

void dial(char *number) {

cout<<"Pay "<< amount <<" r"<<endl<<"Connecting... "<< number <<endl;

};

pay_phone(char *number, int amount) : phone(number) {

pay_phone::amount = amount;

}

private:

int amount;

};

void main(void){

pay_phone city_phone("702-555-1212", 25);

touch_tone home_phone("555-1212");

phone rotary("201-555-1212") ;

// Сделать объект дисковым телефоном

phone *poly_phone = &rotary;

poly_phone->dial("818-555-1212");

// Заменить форму объекта на кнопочный телефон

poly_phone = (phone *) &home_phone;

poly_phone->dial("303-555-1212");

// Заменить форму объекта на платный телефон

poly_phone = (phone *) &city_phone;

poly_phone->dial("212-555-1212");

_getch();

}

Если вы откомпилируете и запустите эту программу, на экране дисплея появится следующий вывод:

 



<== предыдущая лекция | следующая лекция ==>
Тема 2.4 Полиморфизм. Виртуальные функции. | ВИРТУАЛЬНЫЕ ФУНКЦИИ


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


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

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

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


 


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

 
 

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

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