
lab 2 Zhovtyak
.docxГУАП
КАФЕДРА № 41
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
Старший преподаватель |
|
|
|
Д.В. Куртяник |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ |
ВЛОЖЕННЫЕ КЛАССЫ. КОНСТРУКТОРЫ. ПЕРЕГРУЗКА. |
по курсу: ОСНОВЫ ПРОГРАММИРОВАНИЯ |
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
4016 |
|
06.04.2021 |
|
М.О.Жовтяк |
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2021
Вариант 17
Задача. Создать класс для работы с 64-битовыми строками. Битовая строка должна быть представлена двумя полями типа unsigned long. Реализовать операции для работы с битами:
and;
сдвиг влево на заданное количество битов.
Алгоритм работы программы: В string классе создаем конструкторы, которые принимают значения строк из функции main. Далее эти значения «по дружбе» доверяются классу base. В нем, переданные значения проходят, через реализованные мной операции. После этого эти значения показываются на консоли отладки.
Код программы:
Основной файл ConsoleApplication3.cpp:
#include <iostream>
#include "string.cpp"
int main()
{
base stroka(4, 7, 2);
stroka.left_shift();
stroka.concat();
base stroks;
stroks.left_shift();
stroks.concat();
}
Файл с классами string.cpp:
#include <iostream>
class string
{
public:
unsigned long bit1, bit2;
int number;
string()
{
std::cout << "Enter the first bit string: " << std::endl;
std::cin >> bit1;
std::cout << "Enter the second bit string: " << std::endl;
std::cin >> bit2;
std::cout << "How much to move the string to the left? " << std::endl;
std::cin >> number;
};
string(unsigned long a, unsigned long b, int c)
{
bit1 = a;
bit2 = b;
number = c;
};
friend std::ostream& operator << (std::ostream& out, const string& string);
friend std::istream& operator >> (std::istream& in, string& string);
};
class base
{
private:
string work;
public:
base(unsigned long a, unsigned long b, int c) : work(a, b, c) {};
friend std::ostream& operator << (std::ostream& out, const base& string);
base() {}
void left_shift()
{
unsigned long m = work.bit1 << work.number;
unsigned long n = work.bit2 << work.number;
std::cout << " Left shift of the first string: " << m << std::endl;
std::cout << " Left shift of the second string: " << n << std::endl;
}
void concat()
{
unsigned long m = work.bit1 & work.bit2;
std::cout << " Concatenation of the strings: " << m << std::endl;
}
string operator &(string bit)
{
base biti;
bit.bit1 = bit.bit1 & bit.bit2;
return bit;
}
string operator << (string bit)
{
base biti;
bit.bit1 = bit.bit1 << bit.number;
return bit;
}
};
std::ostream& operator<<(std::ostream& out, const base& string)
{
return out;
}
std::istream& operator>> (std::istream& in, string& string)
{
in >> string.bit1;
in >> string.bit2;
in >> string.number;
return in;
};
Результат работы:
Вывод: Я научился работать с классами, перегрузками, вкладывать один класс в другой, реализовывать методы вне класса, разбивать код на несколько файлов.