Дружественные функции

Автор работы: Пользователь скрыл имя, 22 Сентября 2013 в 14:35, лабораторная работа

Краткое описание

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

Прикрепленные файлы: 1 файл

лабораторная работа 3.doc

— 83.50 Кб (Скачать документ)

 

 

 

 

 

 

 

 

 

Лабораторная  работа № 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();

}

 

 

 

 

 

Скриншоты работы программы:

 

 

 


Информация о работе Дружественные функции