Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
31.05.2025
Размер:
106.08 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра ИИСТ

отчет

по практической работе №4

по дисциплине «Информационные технологии»

Тема: Классы.

Студент гр. номер

ФИО

Преподаватель

Куракина Н.И.

Санкт-Петербург

20__

Цель работы:

Изучить классы в С++.

Теоретические положения:

Классы в С++ — это абстракция, описывающая методы, свойства, ещё не существующих объектов. Объекты — конкретное представление абстракции, имеющее свои свойства и методы. Созданные объекты на основе одного класса называются экземплярами этого класса. Эти объекты могут иметь различное поведение, свойства, но все равно будут являться объектами одного класса.

Оператор — это символ, который сообщает компилятору выполнить определенные математические или логические манипуляции.

Ключевое слово operator объявляет функцию, указывающую, какой оператор-символ означает при применении к экземплярам класса. Это дает оператору более одного значения — "перегружает" его. Компилятор различает разные значения оператора, проверяя типы его операндов.

Функцию большинства встроенных операторов можно переопределить глобально или для отдельных классов. Перегруженные операторы реализуются в виде функции.

Если унарная операция перегружается как функция-член, то она не должна иметь аргументов, так как в этом случае ей передается неявный аргумент-указатель this на текущий объект.

Если унарная операция перегружается дружественной функцией, то она должна иметь один аргумент – объект, для которого она выполняется.

Если бинарная операция перегружается с использованием метода класса, то в качестве своего первого аргумента она получает неявно переданную переменную класса (указатель this на объект), а в качестве второго — аргумент из списка параметров. То есть, фактически бинарная операция, перегружаемая методом класса, имеет один аргумент (правый операнд), а левый передается неявно через указатель this.

Если бинарная операция перегружается дружественной функцией, то в списке параметров она должна иметь оба аргумента.

Результаты работы:

Общее:

Создать класс строка. Максимальное число символов в строке – 79.

Ввод строки и определение ее длины оформить в конструкторе

Определить:

  1. Содержит ли строка символы отличные от букв;

  2. Начинается ли строка с буквы А;

  3. Сколько слов в строке

#include <iostream>

#include <string>

#include "Windows.h"

class string

{

public:

string(char* strIn);

char str[81];

bool IsLetter(void);

bool AF(void);

int NumberOfWords();

};

bool string::IsLetter()

{

char simb[53] = { 'A','a','B','b','C','c','D','d','E','e','F','f','G','g','H','h','I','i','J','j','K','k','L','l','M','m','N','n','O','o','P','p','Q','q','R','r','S','s','T','t','U','u','V','v','W','w','X','x','Y','y','Z','z',' ' };

for (int i = 0; i < strlen(str); i++)

{

int kounter=0;

for (int j = 0; j < 53; j++)

if (str[i] != simb[j])

kounter++;

if (kounter == 53)

return false;

}

return true;

}

bool string::AF()

{

if (str[0] == 'A')

return true;

else

return false;

}

int string::NumberOfWords()

{

int num = 0;

for (int i = 0; i < strlen(str); i++)

if (str[i + 1] == '\0' || (str[i]== ' ' && str[i + 1] != ' '))

num++;

return num;

}

string::string(char* strIn)

{

int strBeg = 0;

int strEnd = strlen(strIn);

for (int j = 0; j < strlen(strIn); j++)

if (strIn[j] != ' ')

{

strBeg = j;

break;

}

for (int j = strBeg; j < strlen(strIn); j++)

{

if (strIn[j] != ' ')

strEnd = j;

}

int j = strBeg;

for (int i = 0; i < 81; i++)

{

str[i] = strIn[j++];

if (j > strEnd)

{

str[++i] = '\0';

return;

}

}

str[80] = '\0';

}

void main()

{

SetConsoleOutputCP(1251);

char str[256];

printf("Введите строку: ");

gets_s(str,256);

string st(str);

printf("\n%s\n",st.IsLetter()?"Только буквы":"Присутствуют отличные от букв символы");

printf("\n%s\n",st.AF()?"Строка начинается на \'A\'":"Строка не начинается на \'A\'");

printf("\nКоличество слов: %d\n",st.NumberOfWords());

}

Индивидуальное:

Создать класс строка. Максимальное число символов в строке – 79.

Предусмотреть:

• Функцию-член для ввода строки и определения ее длины (конструктор может отсутствовать!);

• Функции-члены анализа строки (из общего задания)

• Функцию-член печати строки;

Программа должна содержать перегруженную операцию «=», использование которой скопирует S1 в S2. S1 и S2 являются двумя объектами одного класса!

• Создать функцию-член Run(…); выполняющую следующие действия

! Применить Run к объекту S2, предварительно скопировав в него S1

Длина L кратна 4-м, то первая часть строки меняется местами со второй.

#include <iostream>

#include <string>

#include "Windows.h"

class string

{

public:

string(char* strIn);

bool IsLetter(void);

bool AF(void);

int NumberOfWords();

static string get_s();

void puts();

void Run();

string operator=(const string& str);

int len = 0;

char str[81];

};

string string::operator=(const string& strR ) {

for (int i = 0; i < 81; i++)

{

this->str[i] = strR.str[i];

}

return *this;

};

string::string(char* strIn)

{

int strBeg = 0;

int strEnd = strlen(strIn);

for (int j = 0; j < strlen(strIn); j++)

if (strIn[j] != ' ')

{

strBeg = j;

break;

}

for (int j = strBeg; j < strlen(strIn); j++)

{

if (strIn[j] != ' ')

strEnd = j;

}

int j = strBeg;

for (int i = 0; i < 81; i++)

{

len++;

str[i] = strIn[j++];

if (j > strEnd)

{

str[++i] = '\0';

return;

}

}

str[80] = '\0';

}

bool string::IsLetter()

{

char simb[53] = { 'A','a','B','b','C','c','D','d','E','e','F','f','G','g','H','h','I','i','J','j','K','k','L','l','M','m','N','n','O','o','P','p','Q','q','R','r','S','s','T','t','U','u','V','v','W','w','X','x','Y','y','Z','z',' ' };

for (int i = 0; i < len; i++)

{

int kounter = 0;

for (int j = 0; j < 53; j++)

if (str[i] != simb[j])

kounter++;

if (kounter == 53)

return false;

}

return true;

}

bool string::AF()

{

if (str[0] == 'A')

return true;

else

return false;

}

int string::NumberOfWords()

{

int num = 0;

for (int i = 0; i < len; i++)

if (str[i + 1] == '\0' || (str[i] == ' ' && str[i + 1] != ' '))

num++;

return num;

}

string string::get_s()

{

char str[256];

gets_s(str, 256);

string st(str);

return st;

}

void string::puts() {

printf("\n%s\n",str);

return;

}

void string::Run()

{

int mid = 0;

if (len % 4 == 0)

{

mid = len / 2;

char* temp = new char[mid];

for (int i = 0; i < mid; i++)

{

temp[i] = str[i];

str[i] = str[mid + i];

}

for (int i = 0; i < mid; i++)

{

str[mid + i] = temp[i];

}

delete temp;

}

else

return;

}

void main()

{

SetConsoleOutputCP(1251);

char str[256];

printf("Введите строку: ");

gets_s(str,256);

string st(str);

string stCopy = st;

printf("Введите новую строку:");

st=string::get_s();

stCopy.Run();

printf("\nПервая строка: %s\nВторая измененная строка: %s\n",st.str,stCopy.str);

printf("\n%s\n",st.IsLetter()?"Только буквы":"Присутствуют отличные от букв символы");

printf("\n%s\n",st.AF()?"Строка начинается на \'A\'":"Строка не начинается на \'A\'");

printf("\nКоличество слов: %d\n",st.NumberOfWords());

}

Вывод: выполнив практическую работу научились использовать перегрузку операторов в с++.

Соседние файлы в папке 4 практика