Программирование >>  Структурное программирование 

1 ... 181 182 183 [ 184 ] 185 186 187 ... 342


Перегруженная операция присваивания

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)



1 ... 181 182 183 [ 184 ] 185 186 187 ... 342

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