Библиотека String  1.0
Own String library. Лабораторная работа ФБИТ ИТМО
Открытые типы | Открытые члены | Друзья | Полный список членов класса
Класс own::BinStr

Производный от "Строка" класс "Битовая строка". Подробнее...

#include <binstr.h>

Граф наследования:own::BinStr:
own::String

Открытые типы

enum  SIGN { POSITIVE = 1, NEGATIVE = 0 }
 Знак двочного числа Подробнее...
 

Открытые члены

 BinStr (int=0)
 
 BinStr (const char *)
 
 BinStr (const BinStr &)
 
 ~BinStr ()
 
int getSign () const
 
bool isPositive () const
 
bool isNegative () const
 
int getUnsignedNum () const
 
int getNum () const
 
BinStroperator= (const BinStr &)
 
- Открытые члены унаследованные от own::String
 String (int=0)
 
 String (const char *)
 
 String (char)
 
 String (const String &)
 
 ~String ()
 
char * getStr () const
 
int getLen () const
 
void show () const
 
char getChar (int) const
 

Друзья

BinStr operator^ (const BinStr &, const BinStr &)
 
BinStr operator^ (const BinStr &, int)
 
BinStr operator^ (int, const BinStr &)
 
int operator== (const BinStr &, const BinStr &)
 
int operator== (const BinStr &, int)
 
int operator== (int, const BinStr &)
 

Дополнительные унаследованные члены

- Защищенные данные унаследованные от own::String
int len
 Длина строки
 
char * pCh
 Адрес динамически выделенной памяти для размещения символов строки
 

Подробное описание

Производный от "Строка" класс "Битовая строка".

Строки данного класса могут содержать только символы '0' или '1'. Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, "Битовая строка" принимает нулевое значение. Содержимое данных строк рассматривается как двоичное число. Отрицательные числа хранятся в дополнительном коде.

См. определение в файле binstr.h строка 24

Перечисления

◆ SIGN

Знак двочного числа

Элементы перечислений
POSITIVE 

Положительное число

NEGATIVE 

Отрицательное число

См. определение в файле binstr.h строка 51

51  {
52  POSITIVE = 1, ///< Положительное число
53  NEGATIVE = 0 ///< Отрицательное число
54  };

Конструктор(ы)

◆ BinStr() [1/3]

own::BinStr::BinStr ( int  val = 0)

Конструктор без параметров (длина строки = 0) или принимающий длину строки

Аргументы
[in]lenДлина строки (по умолчанию 0)

См. определение в файле binstr.cpp строка 16

16  : String(val)
17 {
18  std::cout << "BinStr::BinStr(int val) : Stroka(val), val=" << val << std::endl;
19 }

◆ BinStr() [2/3]

own::BinStr::BinStr ( const char *  Str)

Конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом)

Аргументы
[in]sСи-строка

См. определение в файле binstr.cpp строка 21

21  : String(Str)
22 {
23  if (!((pCh[0] >= '0' && pCh[0] <= '9'))) {
24  std::cout << "Bad symbol, pCh[0]=" << pCh[0] << std::endl;
25  if (pCh) delete[] pCh;
26  len = 0;
27  pCh = new char[len + 1];
28  pCh[0] = '\0';
29  return;
30  }
31 
32  for (int i = 1; i < len; i++) {
33  if(!(pCh[i] >= '0'&& pCh[i] <= '9')) {
34  std::cout << "Bad string, pCh[" << i << "]=" << pCh[i] << std::endl;
35  if (pCh) delete[] pCh;
36  len = 0;
37  pCh = new char[len + 1];
38  pCh[0] = '\0';
39  return;
40  }
41  }
42  std::cout << "BinStr::BinStr( char* Str):String(Str)" << std::endl;
43  //cout << "fun1=" << fun1() << endl;
44 }

◆ BinStr() [3/3]

own::BinStr::BinStr ( const BinStr from)

Конструктор копирования

Аргументы
[in]fromИсходный объект

См. определение в файле binstr.cpp строка 46

46  : String(from)
47 {
48  std::cout << "BinStr::BinStr(const BinStr& from) : String(from)" << std::endl;
49 }

◆ ~BinStr()

own::BinStr::~BinStr ( )

Деструктор

См. определение в файле binstr.cpp строка 51

52 {
53  std::cout << "BinStr::~BinStr()" << std::endl;
54 }

Методы

◆ getNum()

int own::BinStr::getNum ( ) const

Преобразование строки в число

Возвращает
Число

См. определение в файле binstr.cpp строка 84

85 {
86  int tmp = 0;
87  if (isPositive()) {
88  for (int i = 0; i < len; i++) {
89  tmp *= 2;
90  tmp += pCh[i]-'0';
91  }
92  } else {
93  for (int i = 0; i < len; i++) {
94  tmp *= 2;
95  tmp += '1'-pCh[i];
96  }
97  tmp = -tmp - 1;
98  }
99  return tmp;
100 }

◆ getSign()

int own::BinStr::getSign ( ) const

Получение знака двоичного числа

Возвращает
Знак числа SIGN::POSITIVE или SIGN::NEGATIVE

См. определение в файле binstr.cpp строка 56

57 {
58  if (pCh[0] == '1')
59  return SIGN::NEGATIVE;
60  else
61  return SIGN::POSITIVE;
62 }

◆ getUnsignedNum()

int own::BinStr::getUnsignedNum ( ) const

Преобразование строки в беззнаковое число

Возвращает
Беззнаковое число

См. определение в файле binstr.cpp строка 74

75 {
76  int tmp = 0;
77  for (int i = 0; i < len; i++) {
78  tmp *= 2;
79  tmp += pCh[i]-'0';
80  }
81  return tmp;
82 }

◆ isNegative()

bool own::BinStr::isNegative ( ) const

Проверка на отрицательное число

Возвращает
Является ли число отрицательным

См. определение в файле binstr.cpp строка 69

70 {
71  return getSign() == SIGN::NEGATIVE;
72 }

◆ isPositive()

bool own::BinStr::isPositive ( ) const

Проверка на положительное число

Возвращает
Является ли число положительным

См. определение в файле binstr.cpp строка 64

65 {
66  return getSign() == SIGN::POSITIVE;
67 }

◆ operator=()

BinStr & own::BinStr::operator= ( const BinStr Ds)

Оператор присваивания

См. определение в файле binstr.cpp строка 102

103 {
104  if (&Ds != this) {
105  delete[] pCh;
106  len = strlen(Ds.pCh);
107  pCh = new char[len + 1];
108  strcpy(pCh, Ds.pCh);
109  }
110  std::cout << "BinStr& BinStr::operator=(const BinStr& Ds)" << std::endl;
111  return *this;
112 }

Документация по друзьям класса и функциям, относящимся к классу

◆ operator== [1/3]

int operator== ( const BinStr pobj1,
const BinStr pobj2 
)
friend

Проверка равенства строк как бинарных чисел

См. определение в файле binstr.cpp строка 177

177  {
178  return pobj1.getNum() == pobj2.getNum();
179 }

◆ operator== [2/3]

int operator== ( const BinStr pobj1,
int  pobj2 
)
friend

Проверка равенства бинарной строки и числа

См. определение в файле binstr.cpp строка 181

181  {
182  return pobj1.getNum() == pobj2;
183 }

◆ operator== [3/3]

int operator== ( int  pobj1,
const BinStr pobj2 
)
friend

Проверка равенства бинарной строки и числа

См. определение в файле binstr.cpp строка 185

185  {
186  return pobj1 == pobj2.getNum();
187 }

◆ operator^ [1/3]

BinStr operator^ ( const BinStr pobj1,
const BinStr pobj2 
)
friend

Операция "исключающее или"

Возвращает
Сумма по модулю 2

См. определение в файле binstr.cpp строка 114

114  {
115  if (pobj1.len >= pobj2.len) {
116  BinStr tmp(pobj1.len);
117  int i = pobj1.len - 1;
118  int j = pobj2.len - 1;
119  for (; j>=0; i--, j--) {
120  tmp.pCh[i] = (pobj1.pCh[i] == pobj2.pCh[j]) ? '0' : '1';
121  }
122  for (; i>=0; i--) {
123  tmp.pCh[i] = pobj1.pCh[i];
124  }
125  return tmp;
126  } else {
127  BinStr tmp(pobj2.len);
128  int i = pobj2.len - 1;
129  int j = pobj1.len - 1;
130  for (; j>=0; i--, j--) {
131  tmp.pCh[i] = (pobj2.pCh[i] == pobj1.pCh[j]) ? '0' : '1';
132  }
133  for (; i>=0; i--) {
134  tmp.pCh[i] = pobj2.pCh[i];
135  }
136  return tmp;
137  }
138 }

◆ operator^ [2/3]

BinStr operator^ ( const BinStr pobj1,
int  pobj2 
)
friend

Операция "исключающее или"

Возвращает
Сумма по модулю 2

См. определение в файле binstr.cpp строка 173

173  {
174  return pobj2^pobj1;
175 }

◆ operator^ [3/3]

BinStr operator^ ( int  pobj1,
const BinStr pobj2 
)
friend

Операция "исключающее или"

Возвращает
Сумма по модулю 2

См. определение в файле binstr.cpp строка 140

140  {
141  int pobj1len = 0;
142  int pobj1i = pobj1;
143  for (; pobj1i != 0; pobj1i >>= 1, pobj1len++);
144 
145  if (pobj1len >= pobj2.len) {
146  BinStr tmp(pobj1len);
147  int i = pobj1len - 1;
148  int j = pobj2.len - 1;
149  for (; j>=0; i--, j--) {
150  tmp.pCh[i] = ((pobj1 % 2) == (pobj2.pCh[j]-'0')) ? '0' : '1';
151  pobj1 >> 1;
152  }
153  for (; i>=0; i--) {
154  tmp.pCh[i] = (pobj1 % 2 == 0) ? '0' : '1';
155  pobj1 >> 1;
156  }
157  return tmp;
158  } else {
159  BinStr tmp(pobj2.len);
160  int i = pobj2.len - 1;
161  int j = pobj1len - 1;
162  for (; j>=0; i--, j--) {
163  tmp.pCh[i] = ((pobj2.pCh[i]-'0') == (pobj1 % 2)) ? '0' : '1';
164  pobj1 >> 1;
165  }
166  for (; i>=0; i--) {
167  tmp.pCh[i] = pobj2.pCh[i];
168  }
169  return tmp;
170  }
171 }

Объявления и описания членов классов находятся в файлах:
own::BinStr::getSign
int getSign() const
Definition: binstr.cpp:56
own::BinStr::NEGATIVE
@ NEGATIVE
Отрицательное число
Definition: binstr.h:53
own::BinStr::BinStr
BinStr(int=0)
Definition: binstr.cpp:16
own::BinStr::POSITIVE
@ POSITIVE
Положительное число
Definition: binstr.h:52
own::BinStr::isPositive
bool isPositive() const
Definition: binstr.cpp:64
own::String::pCh
char * pCh
Адрес динамически выделенной памяти для размещения символов строки
Definition: string.h:20
own::String::String
String(int=0)
Definition: string.cpp:15
own::String::len
int len
Длина строки
Definition: string.h:19