Разработка класса для работы с символьными строками и исследование перегрузки операторов

Автор работы: Пользователь скрыл имя, 23 Сентября 2013 в 16:59, лабораторная работа

Описание работы

Цель:Получение практических навыков разработки класса для работы с символьными строками, русификации консольного ввода/вывода, перегрузки операторов, разработки и отладки объектно-ориентированных программ.
Задание:
А. Спроектировать класс String,содержащий две закрытые переменные - указатель на символьную строку(char *s)и размер строки(intп), - и функции работы с ними. Состав функций:
три конструктора: первый - без параметров, второй - с параметрами, третий - для создания копии объекта;
деструктор, освобождающий память, занятую строкой;

Файлы: 1 файл

6.docx

— 22.29 Кб (Скачать файл)

Министерство образования  и науки Российской Федерации

ФГОБУ ВПО «Санкт-Петербургский  государственный университет телекоммуникации им. проф. М.А. Бонч-Бруевича»

Кафедра БИС

 

 

 

 

 

 

ОТЧЁТ

к лабораторной работе №6:

«Разработка класса для работы с символьными строками и исследование

перегрузки операторов»

 

 

 

 

Выполнил: студент группы ИСТ-13с 
Маловичко Ю.С 
Принял: Медведев Валерий Александрович

 

 

 

 

 

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

Цель:Получение практических навыков разработки класса для работы с символьными строками, русификации консольного ввода/вывода, перегрузки операторов, разработки и отладки объектно-ориентированных программ.

Задание: 
А. Спроектировать класс String,содержащий две закрытые переменные - указатель на символьную строку(char *s)и размер строки(intп), - и функции работы с ними. Состав функций:

  1. три конструктора: первый - без параметров, второй - с параметрами, третий - для создания копии объекта;
  2. деструктор, освобождающий память, занятую строкой;
  3. функции доступа к закрытым членам класса: возвращение размера строки length(),извлечение символа с указанным индексомat(),установка символа строкиsetchar();
  4. функции работы со строками: определение длины строкиstrlen(),удаления фрагмента строкиerase(),вставка фрагмента в строкуinsert(),добавления фрагмента в конец строкиappend();
  5. оператор-функции для перегрузки: операции присваивания (=) - для копирования строк, операции «+» - для «склеивания» объектов типа String, операций сравнения (==, !=, <, >) объектов типа String, операции преобразования типа Stringв символьную строку.
  6. оператор-функции перегрузки операторов консольного вывода и ввода объектов типа Stringс одновременной русификацией.

Б. Создать необходимое количество объектов и продемонстрировать работу спроектированных средств при использовании объектов типа String.

 

 

Код программы:

 

6.cpp

#include"class.h"

void main()

{

String obj_A,obj_B,obj_C; charap, ins, ch; inti,j;

cout<<Rus("Введитестроку 1(obj_A): "); cin>>obj_A;

cout<<Rus("Введитестроку 2(obj_B): "); cin>>obj_B;

cout<<"obj_A = "; cout<<obj_A<<endl<<"obj_B = "<<obj_B<<endl;

if(obj_A<obj_B) cout<<obj_A<<"<"<<obj_B<<endl;

if(obj_A>obj_B) cout<<obj_A<<">"<<obj_B<<endl;

if(obj_A!=obj_B) cout<<obj_A<<"!="<<obj_B<<endl; elsecout<<obj_A<<"!="<<obj_B<<endl;

cout<<obj_A<<" + "<<obj_B<<" = "; obj_C=obj_A+obj_B; cout<<obj_C<<endl;

cout<<Rus("Вконецстроки '")<<obj_C; cout<<Rus("' добавить(append): "); cin>>&ap; obj_C.append(&ap);

cout<<Rus("Результат: ")<<obj_C<<endl;

cout<<Rus("Введитеномерсимвола, послекоторогонужновставить 'insert' (insert): "); cin>>i; obj_C.insert("insert", i); cout<<Rus("Результат: ")<<obj_C<<endl;

cout<<Rus("Поменять символ в '")<<obj_C; cout<<Rus("' под номером (setchar): "); cin>>i;

cout<<Rus("Насимвол (setchar): "); cin>>ch; obj_C.setchar(ch, i);

cout<<Rus("Результат: ")<<obj_C<<endl;

cout<<Rus("Вырезатьсимволыв '")<<obj_C; cout<<Rus("' сномера (erase): "); cin>>i;

cout<<Rus("Досимвола (erase): "); cin>>j; obj_C.erase(i, j);

cout<<Rus("Результат: ")<<obj_C<<endl;

cout<<Rus("Введитеномерсимвола, для '")<<obj_C; cout<<Rus("' (at): "); cin>>i;

cout<<Rus("Результат: "); cout<<obj_C.at(i)<<endl;

cout<<Rus("Всегов '")<<obj_C; cout<<Rus("' ")<<obj_C.length(); cout<<Rus(" символов (length):")<<endl;

}

class.h

#include<iostream>

#include<windows.h>

usingnamespacestd;

 

char *Rus(char *str){staticchar s[256]; CharToOemA(str, s);  return s;}

 

classString

{char* str; int n;

public:

 

staticintstrlen(char *str){inti; for(i=0; *str++; i++); returni;}

String():n(1){str = newchar[1]; str[0]='\0'; }

String(char* s){n = strlen(s); str = newchar[n]; for(inti=0; i<n; i++)  str[i]=s[i];  str[n]='\0'; CharToOemA(str,str);}

~String(){delete []str, n;}

 

bool operator < (String&s2){ int k = (n <s2.n) ? n:s2.n;

for(inti=0; i<k; i++){if(str[i]==s2.str[i])continue; return(str[i]<s2.str[i])?true:false;}return (n<k)?true: false;}

 

bool operator > (String&s2){

int k = (n <s2.n) ? n:s2.n;

for(inti=0; i<k; i++){if(str[i]==s2.str[i]) continue;

return (str[i]>s2.str[i])? true :false; }return (n>k)?true: false;}

bool operator != (String&s2){ if(n != s2.n) returntrue;

for(inti=0; i<n; i++){if(str[i]!=s2.str[i]) returntrue;}returnfalse;}

 

String& operator = (String&st){if(&st==this) return *this;

if(str) delete[]str;n=st.n;

str=newchar[n];for(inti=0; i<n; i++) str[i]=st.str[i];return *this;}

 

operatorchar*()

{char *p=newchar[n+1]; inti; for(i=0; i<n;i++) p[i]=str[i]; p[i]='\0';return p;}

 

friendistream& operator >> (istream& in, String&st)

{in>>st.str; st.n=strlen(st.str); return in;}

friendostream& operator << (ostream& out, String&st)

{out<<st.str<<"("<<st.n<<")"; returnout;}

 

String& operator + (String&st){

inti,j,k=n+st.n;

char *p=newchar[k];

String *temp=newString;

for(i=0;i<n;i++) p[i]=str[i];

for(j=0;i<k;i++,j++) p[i]=st.str[j];  p[i]='\0';

temp->str=p;temp->n=k;return *temp;}

 

int length(){return n;}

 

char at(intk){k--; return (k>=0 &&k<n)? str[k]:'\0';}

 

voidsetchar(charch, intk){k--; if(k>=0 &&k<n) str[k]=ch;}

 

void erase(intstart, intend){

inti,j,k=n+start-end-1; char *p = newchar[k];

for(i=0; i<start; i++) p[i]=str[i];

for(i--, j=end; i<k; i++, j++)p[i]=str[j]; p[i]='\0';

delete[]str; str=p; n=k;}

 

void append(char *s){

intlen = strlen(s);inti, k=n+len;

char *p = newchar[k];

for(i=0; i<n; i++) p[i]=str[i];

for(i; i<k; i++) p[i]=*s++; p[i]='\0';

delete[] str; str=p; n=k;}

 

void insert(char *s, intw){w--; inti=0,j=0,ii=0,len = strlen(s),k=n+len;

char *p=newchar[k];

for(i;i<w;i++,ii++) p[i]=str[i];

for(j;j<len;j++,i++) p[i]=s[j];

for(i;i<k;i++,ii++) p[i]=str[ii]; 

delete[] str;str=p;n=k;}

 

};

 

ВЫВОД

 

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


Информация о работе Разработка класса для работы с символьными строками и исследование перегрузки операторов