Программирование >>  Процедурные приложения 

1 ... 77 78 79 [ 80 ] 81 82 83 ... 150


cout<< Сумма углов равна

<< sum of angles.get degrees() << d

<< sum of angles.get minutes() << m

<< sum of angles,get seconds() << s

<< endl;

return(0);

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

angle value ang;

ang.seconds = (seconds + angle sum.seconds) % 60; ang.minutes = ((seconds + angle sum.seconds) / 60 + minutes + angle sum.minutes) % 60;

ang.degrees = ((seconds+ angle sum.seconds) / 60 + minutes + angle sum.minutes) / 60; ang.degrees += degrees + angle sum.degrees;

Обратите внимание на то, что когда сумма секунд или минут превышает 60, должен осуществляться перенос соответствующего числа разрядов. Поэтому каждая предыдущая операция повторяется в следующей, только оператор деления по модулю (%) заменяется оператором деления без остатка (/).

Программа выдаст на экран такую строку:

Сумма углов равна 253d 51m 33s Проверьте, правильно ли вычислен результат.

Производные классы

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

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

class имя производного класса : (public/private/protected) имя базового класса

{...};

Тип наследования public означает, что все открытые и защищенные члены базового класса становятся таковыми производного класса. Тип наследования private означает, что все открытые и защищенные члены базового класса становятся закрытыми членами производного класса. Тип наследования protected означает, что все открытые и защищенные члены базового класса становятся защищенными членами производного класса.

В следующей программе показан пример создания открытых производных классов. Родительский класс consumer содержит общие данные о клиенте: имя, адрес, город, штат и почтовый индекс. От базового класса порождаются два производных класса: airlineи rental car. Первый из них хранит сведения о расстоянии, покрытом клиентом на арендованном самолете, а второй - сведения о расстоянии, покрытом на арендованном автомобиле.

derclass.cpp

Эта программа на языке C++ демонстрирует использование производных классов.

#include <iostream.h>



#include <string.h> char newline;

class consumer { char name[60], street[60], city[20], state[15], zip[10]; public: void data output(void); void data input(void); }; void consumer::data output() {

cout << Имя: cout << Улица* cout << Город: cout << Штат: cout << Индекс:

<< name << endl; << street << endl; << city << endl; << state << endl; << zip << endl; void consumer: :data input () { cout<< Введите полное имя клиента: ; cin.get (name, 59,\n)>>

cin.get(newline); пропуск символа новой строки

cout << Введите адрес: ; cin.get(street, 59,\n); cin.get(newline); cout << Введите город: ; cin.get(city, 19,\n); cin.get(newline) ;

cout<< Введите название штата: ; cin.get(state, 14, \n); cin.get (newline);

cout << Введите почтовый индекс: ; cin.get(zip, 9,\n); cin.get(newline);

class airline : public consumer {

char airline type[20];

float acc air miles; public:

void airline consumer();

void disp air mileage(); };

void airline : :airline consumer () {

data input ( ) ;

cout << Введите тип авиалиний : ;

cin.get (airline type, 19,\n); cin.get (newline) ;

cout << Введите расстояние, покрытое в авиарейсах: ;

cin >> acc air miles; cin.get (newline) ; }

void airline : :disp air mileage () {

data output ( ) ;

cout << Тип авиалиний: << airline type << endl;

cout << Суммарное расстояние: << acc air miles << endl;

class rental car : public consumer {

char rental car type[20] ;

float acc road miles; public:

void rental car consumer ( ) ;

void disp road mileage () ;

void rental car::rental car consumer() { data input();

cout<< Введите марку автомобиля: ; cin.get(rental car type, 19,\n); cin.get (newline) ;

cout << Введите суммарный автопробег: ; cin >> acc road miles;



cin.get(newline);

void rental car::disp road mileage() { data output();

cout << Марка автомобиля:

<< rental car type << endl; cout << Суммарный автопробег: << acc road miles << endl;

main()

airline cons1; rental car cons2;

cout << \n-Аренда самолета-\n ; cons1.airline consumer();

cout << \n-Аренда автомобиля-\n ;

cons2.rental car consumer();

cout<< \n-Аренда самолета-\n ;

cons1.disp air mileage();

cout<< \n-Аренда автомобиля-\n ;

cons2 . disp road mileage();

return(0);

Переменные родительского класса consumerнедоступны дочерним классам, так как являются закрытыми. Поэтому для работы с ними созданы функции data input () и data output (), которые помещены в открытую часть класса и могут быть вызваны в производных классах.



1 ... 77 78 79 [ 80 ] 81 82 83 ... 150

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика