|
Программирование >> Структурное программирование
Перегруженная операция присваивания Complexs Complex::operator=(const Complex Sright) real = right.real; imaginary = right.imaginary; return *this; возможность сцепления Отображение объекта Complex в форме: (а, Ь) void Complex::print() const { cout С real , imaginary ); } Рис. 8.7. Определения функций-элементов класса Complex (часть 3 из 5) FIGS 7.СРР Драйвер класса Complex tinclude <iostream.h> iinclude complexl.h Complex X, y(4.3, 8.2), z(3.3, 1.1); cout x: ; X.print (); cout endl y: ; y.print{); cout endl << z: ; z.print 0; X = у + z; cout endl endl x = у + z: endl; X.print(); cout = ; y.print 0; cout + ; z.print (); X = у - z; cout endl endl x = у - z: endl; X.print(); cout = ; y.print(); cout - ; z.print(); cout endl; return 0; Рис. 8.7. Драйвер для класса Complex (чааь 4 из 5) 8.16 Машина с 32-битовыми целыми может представлять целые в диапазоне примерно от -2 миллиардов до +2 миллиардов. Ограничение этого фиксированного диапазона редко доставляет беспокойство. Но суш;ествует много приложений, в которых вы хотели бы иметь возможность представления целых в гораздо более широком диапазоне. Вот для этого и был создан C+-I- - для создания мош;ных новых типов данных. Рассмотрите класс Hugeint на рис.8.8. Тш;ательно изучите класс, а затем: a) Точно опишите, как он работает. b) Какие ограничения имеет класс? c) Измените класс так, чтобы можно было работать с произвольно большими числами. (Подсказка: используйте связный список для представления Hugeint). d) Перегрузите операцию умножения *. e) Перегрузите операцию деления /. f) Перегрузите операции отношения и проверки на равенство. HUGEINT1.H Определение класса Hugeint #ifndef HUGEINT1 H #define HUGEINT1 H #include <iostream.h> class Hugeint { friend ostream &operator<<(ostream &, Hugeint S); public: Hugeint(long =0); конструктор преобразования Hugeint(const char *); конструктор преобразования Hugeint operator+(Hugeint &); сложение private: short integer[30]; tendif Рис. 8.8. Определенный пользователем класс больших целых (часть 1 из 4) х: (О, 0) у: (4.3, 8.2) z:(3.3, 1.1) X = у + Z: (7.6, 9.3) = (4.3, 8.2) + (3.3, 1.1) X = у - Z: (1, 7.1) = (4.3, 8.2) - (3.3, 1.1) Рис. 8.7. Выходные данные драйвера класса Complex (часть 5 из 5) HUGEINT1.CPP Определения функций элементов и дружественных функций класса Hugeint #include <string.h> #include hugeintl.h конструктор преобразования Hugeint::HugeInt(long val) { for (int i = 0; i <= 29; i++) integer[ i ] = 0; задание массиву нулевых начальных значений for (i = 2 9; val != О S& i >= 0; i-) { integer[ i ] = val % 10; val /= 10; Hugeint::Hugeint(const char *string) ЩШ { ...- int i, j; for (i = 0; i <= 29; i++) integer[ i ] =0; for (i = 30 - strlen (string), j = 0; i <= 29; i++, j++) integer[ i ] = string[ j ] - 0; Сложение tf Hugeint Hugeint::operator+(Hugeint &op2) { Hugeint temp; int carry = 0; for (int i = 29; i >= 0; i-) { temp.integer[ i ] = integer[ i ] + op2.integer[ i ] + carry; if (temp, integer [ i ] > 9) { temp.integer[ i ] %= 10; V*-*; carry = 1; H ) else carry = 0; H * return temp;} ostreamS operator<<(ostream soutput, Hugeint Snum) for (int i = 0; (num.integer[i] == 0) SS (i <= 29); i++) пропуск начальных нулей Рис. 8.8. Определенный пользователем класс больших целых (часть 2 из 4)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |