|
Программирование >> Процедурные приложения
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 (), которые помещены в открытую часть класса и могут быть вызваны в производных классах.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |