Автор работы: Пользователь скрыл имя, 23 Сентября 2013 в 16:59, лабораторная работа
Цель:Получение практических навыков разработки класса для работы с символьными строками, русификации консольного ввода/вывода, перегрузки операторов, разработки и отладки объектно-ориентированных программ.
Задание:
А. Спроектировать класс String,содержащий две закрытые переменные - указатель на символьную строку(char *s)и размер строки(intп), - и функции работы с ними. Состав функций:
три конструктора: первый - без параметров, второй - с параметрами, третий - для создания копии объекта;
деструктор, освобождающий память, занятую строкой;
Министерство образования и науки Российской Федерации
ФГОБУ ВПО «Санкт-Петербургский
государственный университет
Кафедра БИС
ОТЧЁТ
к лабораторной работе №6:
«Разработка класса для работы с символьными строками и исследование
перегрузки операторов»
Выполнил: студент группы ИСТ-13с
Маловичко Ю.С
Принял: Медведев Валерий Александрович
Санкт-Петербург, 2013
Цель:Получение практических навыков разработки класса для работы с символьными строками, русификации консольного ввода/вывода, перегрузки операторов, разработки и отладки объектно-ориентированных программ.
Задание:
А. Спроектировать
класс String,содержащий
две закрытые переменные - указатель на
символьную строку(char *s)и размер
строки(intп), - и функции
работы с ними. Состав функций:
Б. Создать необходимое количество объектов и продемонстрировать работу спроектированных средств при использовании объектов типа 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<<"
if(obj_A>obj_B) cout<<obj_A<<"
if(obj_A!=obj_B) cout<<obj_A<<"!="<<obj_B<<
cout<<obj_A<<" + "<<obj_B<<" = "; obj_C=obj_A+obj_B; cout<<obj_C<<endl;
cout<<Rus("Вконецстроки '")<<obj_C; cout<<Rus("' добавить(append): "); cin>>≈ obj_C.append(&ap);
cout<<Rus("Результат: ")<<obj_C<<endl;
cout<<Rus("
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("
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])cont
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;}
};
ВЫВОД
В данной работе я ознакомилась с функциями работы со строками, русификации консольного ввода/вывода, перегрузки операторов.