|
Программирование >> Процедурные приложения
double degree::get sine(void) return(sin(DEG TO RAD * data value)); double degree::get cosine(void) return(cos(DEG TO RAD * data value)); double degree::get tangent(void) return(tan(DEG TO RAD * data value)); } double degree::get secant(void) return(1.0 / sin(DEG TO RAD * data value)); ) double degree::get cosecant(void) return (1.0/ cos(DEG TO RAD * data value)); double degree::get cotangent(void) return(1.0/ tan(DEG TO RAD * data value)); main() устанавливаем значение угла равным 25.0градусов deg.set value(25.0); cout << Синус угла равен, << deg.get sine() << endl; cout << Косинус угла равен << deg.get cosine() << endl; cout << Тангенс угла равен << deg.get tangent() << endl; cout << Секанс угла равен << deg.get secant() << endl; cout << Косеканс угла равен << deg.get cosecant() << endl; cout << Котангенс угла равен << deg.get cotangent() << endl; return(0); } Как видите, тело программы сохранилось прежним. Просто описание структуры было преобразовано в описание настоящего класса C++ с открытой и закрытой секциями. Программа выведет на экран следующую информацию: Синус угла равен 0.422618 Косинус угла равен 0.906308 Тангенс угла равен 0.466308 Секанс угла равен 2.3662 Косеканс угла равен 1.10338 Котангенс угла равен 2.14451 Глава 14. Классы Особенности классов o Конструкторы и деструкторы o Перегрузка функций-членов класса o Дружественные функции o Указатель this Перегрузка операторов Производные классы Как было показано в предыдущей главе, примитивный класс можно создать с помощью ключевого слова struct, хотя логичнее все же воспользоваться ключевым словом class. В любом случае получается структура, состоящая из переменных и функций-членов, которые выполняют действия над переменными этой структуры. В данной главе приводятся дополнительные сведения о классах в C++: рассказывается об использовании конструкторов и деструкторов, перегрузке функций-членов и операторов, дружественных функциях, наследовании классов и др. Особенности классов Синтаксис создания простейшего класса был рассмотрен в предыдущей главе. Но, конечно же, возможности классов значительно шире, и в следующих параграфах мы подробнее познакомимся с данной темой. Конструкторы и деструкторы Конструктор представляет собой особого рода функцию-член класса, предназначенную в первую очередь для инициализации переменных класса и резервирования памяти. Имя конструктора совпадает с именем класса, которому он принадлежит. Конструкторы могут принимать аргументы и быть перегруженными. При создании объекта класса нужный конструктор вызывается автоматически. Если при описании класса конструктор не был задан, то компилятор сгенерирует для класса стандартный конструктор. Деструктором называется еще одна специальная функция-член класса, которая служит в основном для освобождения динамической памяти, занимаемой удаляемым объектом. Деструктор, как и конструктор, носит имя класса, которое в качестве префикса содержит знак тильды (~). Деструктор вызывается автоматически, когда в программе встречается оператор delete с указателем на объект класса или когда объект выходит за пределы своей области видимости. В отличие от конструкторов, деструкторы не принимают никаких аргументов и не могут быть перегружены. Если деструктор не задан явно, компилятор предоставит классу стандартный деструктор. В следующей программе продемонстрировано создание простейших конструктора и деструктора. В данном случае они лишь сигнализируют соответственно о создании и удалении объекта класса coins. Обратите внимание на то, что обе функции вызываются автоматически: конструктор - в строке coins cash in cents; а деструктор - после завершения функции main(). coins.cpp В этой программе на языке C++ демонстрируется создание конструктора и деструктора. Данная программа вычисляет, каким набором монет достоинством 25,10,5 и 1 копейка можно представить заданную денежную сумму. 232 #include <iostream.h> const int QUARTER = 25; const int DIME = 10; const int NICKEL = 5; class coins { int number; public: coins () { cout << Начало вгчислений.\n ;} конструктор ~coins () { cout << \nКонец вычислений. ; } деструктор void get cents(int); int quarter conversion(void) ; int dime conversion(int); int nickel conversion(int); void coins::get cents(int cents) { number = cents; cout << number << копеек состоит из таких монет: << endl; ) int coins::quarter conversion() cout << number / QUARTER << - достоинством 25, return (number % QUARTER) ; int coins::dime conversion(int d) { cout<< d/ DIME<< - достоинством 10, return(d % DIME); } int coins::nickel conversion(int n) { cout<< n/ NICKEL<< - достоинством 5 и return(n % NICKEL); } main () int с, d, n, p; cout<< Задайте денежную сумму в копейках: ; cin с; создание объекта cash in cents класса coins coins cash in cents; cash in cents.get cents( с); d = cash in cents.quarter conversion(); n = cash in cents .dime conversion (d); p = cash in cents.nickel conversion(n); cout << p << - достоинством 1. ; return(0); } Вот как будут выглядеть результаты работы программы: Задайте денежную сумму в копейках: 159 Начало вычислений. 159 копеек состоит из таких монет: 6 - достоинством 25, 0 - достоинством 10, 1 - достоинством 5 и 4 - достоинством 1. Конец вычислений. В функции get cents{) заданная пользователем денежная сумма записывается в переменную number класса coins. Функция quarter conversion() делит значение numberна 25 (константа QUARTER), вычисляя тем самым, сколько монет достоинством 25 копеек умещается в заданной сумме. В программу возвращается остаток от деления, который далее, в функции dime conversion(), делится уже на 10 (константа dime). Снова возвращается остаток, на этот раз он передается в функцию nickel conversion(), где делится на 5 (константа NICKEL). Последний остаток определяет количество однокопеечных монет. Инициализация переменных-членов с помощью конструктора Основное практическое применение конструктора состоит в инициализации закрытых переменных-членов класса. В предыдущем примере переменная numbersинициализировалась с помощью специально предназначенной для этого функции-члена get cents(), записывавшей
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |