bsuir.info
БГУИР: Дистанционное и заочное обучение
(файловый архив)
Вход (быстрый)
Регистрация
Категории каталога
Другое [197]
Бухучет [16]
ВМиМОвЭ [4]
ОДМиТА [13]
ОЛОБД [17]
ООПиП [67]
ОС [19]
ПСОД [47]
Форма входа
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Файловый архив
Файлы » ИСиТвЭ » Другое

ИСиТвЭ (о.), ООП, Лабораторная работа, вар.1, 2011
Подробности о скачивании 13.12.2014, 17:12
Лабораторная работа № 3
на тему «Дружественные функции»

Лабораторная работа №3

Тема работы: Программирование алгоритмов с использованием конструктора, деструктора и конструкта копирования. Использование переменных ссылочного типа. Дружественные функции.

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

Вариант заданий:
Определить класс String для хранения строки. В классе определите следующие открытые функции:
String() - конструктор по умолчанию;
String(const char *str) - конструктор. Получает указатель на строку str, инициализирует буфер для хранения строки, копирует строку в буфер;
String(const String & str) - конструктор копирования;
~String() - деструктор. Освобождает все занятые ресурсы;
int Length() - возвращает длину строки;
void Print() - выводит строку на экран;
String*StrCpy(String* dst,String* src) - дружественная функция. Копирует строку src в строку dst, возвращает результат;
String*StrCat(String* dst,String* src) - дружественная функция. Выполняет конкатенацию строк, результат помещается в dst, возвращает результат.
Дружественную функцию в соответствии с вариантом:
Вариант 1:
Дана строка. Слова в предложении разделены одним или несколькими пробелами. Слова могут состоять только из цифр или букв. Необходимо найти сумму чисел, входящих в строку.

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

Файл "3.h"

class String
{ char *str;
int r;
public:
String();
String(const char *str);
String(const String &str);
~ String();
int Length ();
int Print ();
friend String *StrCpy(String *dst, String *src);
friend String *StrCat(String *src, String *dst);
friend int StrTok_sum(String *dst);
};

#include "stdafx.h"
#include <stdio.h>
#include "conio.h"
#include "3.h"
#include <iostream>

using namespace std;

String::String(): str(NULL), r(0){}

String::String(const char *str1)
{
cout<<"Работает конструктор"<<endl;
int i, k=0;
for(int i=0; str1[i]!= '\0'; i++ )
k++;
str=new char[k+1];
for(i=0; str1[i]!='\0'; i++)
str[i]=str1[i];
str[i]='\0';
}

String::String(const String &str1)
{
cout<<"Работает конструктор копирования"<<endl;
int i, k=0;
for(int i=0; str1.str[i]!= '\0'; i++ )
k++;
str=new char[k+1];
for(i=0; str1.str[i]!='\0'; i++)
str[i]=str1.str[i];
str[i]='\0';
}

String:: ~ String()
{
delete []str;
}

int String:: Print()
{
if(str==NULL){
cout<<"Строка пуста"<<endl;
return 0;
}
else
puts(str);
}

int String::Length()
{
int k=0;
for(int i=0; str[i]!='\0'; i++ )
k++;
return k;
}

String *StrCpy(String *dst, String *src)
{
int i;
delete [] dst->str;
dst->str = new char [src->Length() +1];
for(i=0; src->str[i]!='\0';i++)
dst->str[i]=src->str[i];
dst->str[i]='\0';
return dst;
}

String *StrCat(String *src, String *dst)
{ int i,j;
String ob4;
int l1=dst->Length();
int l2=src->Length();
ob4.str = new char [ l1 + l2 + 1];
for(i=0; src->str[i]!='\0'; i++)
ob4.str[i]=src->str[i];
for(j=0; dst->str[j]!='\0'; j++, i++)
ob4.str[i]=dst->str[j];
ob4.str[i]='\0';
delete src->str;
int k = ob4.Length();
src->str=new char[k+1];
src->r=ob4.Length();
src=StrCpy(src, &ob4);
return src;
}

int StrTok_sum(String *dst)
{
int i, sum;
for(sum = (i = 0);i<dst->Length() && *(dst->str+i) != '\0'; i++)
{
if('0' <= *(dst->str+i) && *(dst->str+i) <= '9')
{
sum += (*(dst->str+i) - 48);
}
}
return sum;
}
void main()
{ setlocale(LC_ALL,"RUS");
char st[255], st2[255], st3[255];
cout<<"Введите строку 1 "<<endl;
gets(st);
cout<<"Введите строку 2"<<endl;
gets(st2);
cout<<"Создадим объект с помощью констуктора без параметров"<<endl;
String str1;
str1.Print();
cout<<endl;
cout<<"Создадим объект №1 с помощью констуктора c параметром"<<endl;
String str2(st);
str2.Print();
cout<<"Создадим объект №2 с помощью констуктора c параметром"<<endl;
String str3(st2);
str3.Print();
cout<<endl;
cout<<"Длина строки №2"<<endl;
int k=str3.Length();
cout<<k <<endl;
cout<<endl;
cout<<"Создадим объект №3 с помощью констуктора копирования"<<endl;
String str4(str2);
str4.Print();
cout<<endl;
cout<<"Выведем на экран сумму чисел входящих в строку"<<endl;
cout<<StrTok_sum(&str2)<<endl;
cout<<"Конкатанация строк №1 и №2"<<endl;
StrCat(&str2, &str3);
str2.Print();
}

Скриншоты работы программы:
Категория: Другое | Добавил: den183
Просмотров: 1151 | Загрузок: 5
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]