Р. ЛАФОРЕ ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть13) онлайн

Описатель класса

Прежде всего рассмотрим заголовочный файл для VERYLONG. В нем содержится

спецификация одноименного класса.

Листинг 13.1. Заголовочный файл для VERYLONG

// verylong.h

// описатель класса сверхбольших целых чисел

#include <iostream>

#include <string.h>            //для strlen()и т. п.

#include <stdlib.h>            //для ltoa()

using namespace std;

 

const int SZ = 1000;           //максимальное число разрядов

 

class verylong

  {

  private:

    char vlstr[SZ];            //число как строка

    int vlen;                  //длина строки verylong

    verylong multdigit(const int) const; //прототипы

    verylong mult10(const verylong) const;// скрытых

                                          // функций

  public:

    verylong() : vlen(0)       //конструктор без аргументов

      { vlstr[0]='\0'; }

    verylong(const char s[SZ]) //конструктор (1 аргумент)

      { strcpy(vlstr, s); vlen=strlen(s); } //для строки

    verylong(const unsigned long n) //конструктор (1 арг.)

      {                             //для long int

 

ltoa(n, vlstr, 10);           //перевести в строку

      strrev(vlstr);                //перевернуть ее

      vlen=strlen(vlstr);           //найти длину

      }

    void putvl() const;              //вывести число

    void getvl();       //получить число от пользователя

    verylong operator + (const verylong); //сложить числа

    verylong operator * (const verylong); //умножить

  };

 

В дополнение к данным в классе verylong имеются две скрытые функции.

Одна из них умножает сверхбольшое число на цифру, другая — умножает на 10.

Это внутренние функции, используемые при умножении сверхбольших чисел.

Можно заметить, что в классе три конструктора. Один сбрасывает сверх-

большое число в ноль, устанавливая в начале массива нуль-ограничитель и при-

сваивая длине строки нулевое значение. Второй инициализирует число строкой

(в которой оно хранится в обратном порядке), а третий — значением long int.

Метод putv1() выводит на экран значение числа, a getv1() — получает его от

пользователя. Ввести можно сколь угодно большое число в пределах 1000 раз-

рядов. Имейте в виду, что в этой программе нет никаких проверок на ошибки.

Если вы напишете вместо цифр какие-то символы, программа не отреагирует на

это, но и результат операции будет неправильный.

Два перегруженных оператора — «+» и «*» — выполняют, соответственно,

сложение и умножение. Можно использовать даже такие сложные выражения, как

 

alpha = beta * gamma + delta

для выполнения арифметических действий над данными типа verylong.

 

16