Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задание С++ 07_10_08_.doc
Скачиваний:
25
Добавлен:
11.03.2016
Размер:
1.15 Mб
Скачать

Классы. Задание 4. Объектно-ориентированная реализация текстового редактора

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

Задание 4. 1 Разработка класса классаMyString.

Строки представлены в виде обьектов класса MyString

Файл MyString.h

#pragma once

#include "io.h"

class MyString

{char* s;

int len;

public:

MyString(void);

MyString (char* s);

MyString (const MyString& );

MyString* copy();

void assign (const MyString& t);

~MyString(void);

void dispose ();

int length(){return len;}

int length()const {return len;}

char* ToPchar();

int ToInt();

double ToDouble();

String* ToString();

int equal(const MyString& t);

int cmp(const MyString& t);

int input(File fp) ;

int input() ;

int output(File f);

int output();

intinput(TextBox*t);

};

Пример реализации

Файл MyString.cpp

#include "StdAfx.h"

#include "MyString.h"

#include "MyConvert.h"

MyString::MyString(void)

{s=0; len=0;}

MyString::~MyString(void)

{dispose() ;

}

void MyString::dispose()

{delete [] s;}

MyString::MyString (char* ss)

{if(ss==0){s=0; len=0;return ;}

s=new char[(len=strlen(s))+1];

strcpy(s,ss);

}

MyString::MyString(const MyString& t)

{s=new char[(len=t.len)+1];

strcpy(s,t.s);

}

void MyString::assign (const MyString& t)

{if(this==&t)return;

char*ss=new char[(len=t.len)+1];

strcpy(ss,t.s);

delete [] s;

s=ss;

}

MyString* MyString::copy()

{return new MyString(*this);}

char* MyString::ToPchar()

{if(s==0)return 0;

char* ss=new char[len+1];

strcpy(ss,s);

return ss;}

int MyString::ToInt()

{int i;

MyConvert::copyto(&i,s);

return i;}

double MyString::ToDouble()

{double d;

MyConvert::copyto( &d,s);

return d;}

String* MyString::ToString()

{return new String(s);}

int MyString::equal(const MyString& ss)

{return strcmp(s,ss.s)==0;}

int MyString::cmp(const MyString& ss)

{return strcmp(s,ss.s);}

int MyString::input(File f)

{ if(::input(f,&s))

return len=strlen(s);

return 0;}

int MyString::input()

{ if(::input(&s))

return len=strlen(s);

return 0;}

int MyString::input(TextBox * t)

{if(::input(t,&s))

return len=strlen(s);

return 0;}

int MyString::output(File f )

{return ::output(f,s);}

int MyString::output()

{return ::output(s);}

Задание 4. 2 Разработка класса таблица.

Для выделения динамической памяти под массив объектов класса MyStringиспользуется классvec. Количество строк указывается в виде параметра конструктора классvec.

class vec

{ T* start;

T* finish;

public:

vec(void){start=new T[100];finish=start+100;}

vec(int sz){start=new T[sz];finish=start+sz;}

~vec(void){delete [] start;}

T* begin(void){return start;}

T* end(void){return finish;}

int get_size(void){return finish-start;}

T& get_item(int i){return *(begin()+i);}

};

#pragma once

#include "item.h"

#include "io.h"

#include "compare.h"

#include "vec.h"

class Tabl{

vec v;

T* cur;

T buf;

public:

Tabl( int sz=100,T buffer=0);

~Tabl( );

void resize(int n);

void clear();

void dispose ();

T* begin();

T* end() ;

int length();

T get_item(int i);

T* insert(const T& item);

T* erase(T* pos);

int remove(const T& item);

int find(int first,int last,const T& item);

int replace(const T&Old,const T&New);

void output();

int input();

int input(File f);

void output(File f);

void foutput(char* FileName);

int finput(char* FileName);

void output(ListView*list);

};

Пример реализации

#include "Tabl.h"

T* Tabl::begin(){return v.begin();}

T* Tabl::end() {return cur;}

T Tabl::get_item(int i){return v.get_item(i);}

int Tabl::length(){return cur-begin();}

Tabl::Tabl( int sz,T buffer):v(sz)

{buf=buffer;

cur=begin();

}

void Tabl::clear( )

{T* i;

for( i=begin(); i!=cur;i++)

{(*i)->dispose();

delete (*i);}

cur=begin();

}

void Tabl::dispose ()

{clear();

delete buf;}

Tabl::~Tabl( ){dispose ();}

T* Tabl::insert(const T& item)

{if(length()>v.get_size())

v.resize(2*length());

*cur++=item->copy();

return cur;

}

void Tabl::output(ListView*list)

{list->Items->Clear();

for(T* i=begin();i!=end();i++)

(*i)->output(list);

}