Добавил:
polinakrasnoselskaya@mail.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Контрольная работа 12 вариант (Николаенко)

.docx
Скачиваний:
9
Добавлен:
31.05.2020
Размер:
419.45 Кб
Скачать

Министерство образования Республики Беларусь

Учреждение образования

«БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ»

Институт информационных технологий

Специальность Программное обеспечение информационных технологий

КОНТРОЛЬНАЯ РАБОТА

По курсу Объектно-ориентированные технологии программирования и стандарты проектирования

Вариант № 12

Студент-заочник 2 курса

Группы № 781074

ФИО Красносельская Полина Юрьевна

Адрес Могилевская обл., г. Бобруйск, ул. Урицкого, 71/30

Тел. +375259550391

Минск, 2019

Если в задании требуется разработать класс, то он должен включать:

  • компоненты данные

  • методы:

а) конструктор по умолчанию;

б) конструктор с параметрами;

в) конструктор копирования;

г) деструктор;

д) методы класса для работы с данными.

Компоненты данные класса должны иметь атрибут private или protected (в зависимости от необходимости).

При реализации задания 1 функцию вывода содержимого объекта реализовать как внешнюю по отношению к классу

При реализации задания 3 в базовый класс (кроме перечисленных выше) добавить методы: set – инициализации данных базового класса, get – возврата данных класса.

1. Создать 2 объекта разработанного класса. Одной из компонент класса является символьная строка. В результате выполнения программы в обоих объектах исключить в каждом слове все повторяющиеся буквы (оставить только одну из них). Содержимое объектов (их строки) до и после обмена вывести на экран.

#include "stdafx.h"

#include <iostream>

using namespace std;

class A

{

private:

char *str1;

public:

A()

{

cout<<"Работает конструктор по умолчанию"<<endl;

}

A(char *c)

{

cout<<"Работает конструктор с параметрами"<<endl;

str1=c;

}

A(A &s)

{

cout<<"Работает конструктор копирования"<<endl;

str1=s.str1;

}

~A()

{

delete[] str1;

cout<<"Деструктор"<<endl;

}

void set()

{

int i, j, k=0, k1=0, q;

char buf[100];

memset(buf, 0, sizeof(buf));

for (i=0; i<=strlen(str1); i++)

{

if (k1>0)

{

for (j=q; j<=strlen(buf); j++)

{

if (str1[i]==buf[j] && str1[i]!=' ')

break;

if (j==strlen(buf))

{

buf[k]=str1[i];

k++;

break;

}

if (str1[i]==' ')

{

k1=0;

q=k;

break;

}

}

}

if (k1==0)

for (j=0; j<=strlen(buf); j++)

{

if (str1[i]==buf[j] && str1[i]!=' ')

break;

if (j==strlen(buf))

{

buf[k]=str1[i];

k++;

break;

}

if (str1[i]==' ')

{

buf[k]=str1[i];

k++;

k1++;

q=k;

break;

}

}

}

str1 = new char[100];

strcpy(str1, buf);

}

friend void print(A&);

};

void print(A &a)

{

cout<<a.str1<<endl;

}

void main ()

{

setlocale(LC_ALL,"rus");

A a1,a2("объектно ориентированное программирование"),a3(a2),b1,b2("и стандарты проектирования"),b3(a2);

cout<<endl;

cout<<"Строка первого объекта"<<endl;

print(a2);

cout<<endl;

cout<<"Строка второго объекта"<<endl;

print(b2);

cout<<endl;

a2.set();

b2.set();

cout<<"Новая строка первого объекта"<<endl;

print(a2);

cout<<endl;

cout<<"Новая строка второго объекта"<<endl;

print(b2);

cout<<endl;

system("pause");

}

2. Создать несколько объектов (например, a и b) разработанного класса. Класс – символьная строка. Реализовать для объектов данного класса перегрузку операции -- (b=a--). Содержимое объектов (a, b, их строк), до и после выполнения операции, вывести на экран.

#include "stdafx.h"

#include <iostream>

using namespace std;

class A

{

private:

char *str1;

public:

A()

{

cout<<"Работает конструктор по умолчанию"<<endl;

}

A(char *c)

{

cout<<"Работает конструктор с параметрами"<<endl;

str1=c;

}

A(A &s)

{

cout<<"Работает конструктор копирования"<<endl;

str1=s.str1;

}

~A()

{

cout<<"Деструктор"<<endl;

}

A operator --(int)

{

int i;

char buf[100];

memset(buf, 0, sizeof(buf));

for (i=0; i<strlen(str1)-1; i++)

buf[i]=str1[i];

str1 = new char[100];

strcpy(str1,buf);

return str1;

}

void print()

{

cout<<str1<<endl;

}

};

void main ()

{

setlocale(LC_ALL,"rus");

A a1,a2("программирование"),a3(a2),b1,b2("проектирование"),b3(a2);

cout<<endl;

cout<<"Строка первого объекта"<<endl;

a2.print();

cout<<endl;

cout<<"Строка второго объекта"<<endl;

b2.print();

cout<<endl;

b2=a2--;

cout<<"Строка второго объекта при изменении первого объекта (удаление 1 символа в конце строки)"<<endl;

b2.print();

cout<<endl;

system("pause");

}

3. Создать иерархию классов представляющих простое наследование. Базовый класс – вектор (числовой динамический массив (int *)). Производный класс – методы, работающие с данными базового класса. Реализовать в производном классе метод – нахождения в векторе первой последовательности элементы которой строго возрастают и удаления ее из вектора.

#include "stdafx.h"

#include <iostream>

using namespace std;

class A

{

protected:

int *vektor;

public:

A()

{

cout<<"Работает конструктор по умолчанию базового класса"<<endl;

}

A(int *c)

{

cout<<"Работает конструктор с параметрами базового класса"<<endl;

vektor=c;

}

A(A &s)

{

cout<<"Работает конструктор копирования базового класса"<<endl;

vektor=s.vektor;

}

~A()

{

delete[] vektor;

cout<<"Деструктор базового класса"<<endl;

}

void set()

{

int i;

cout<<"Введите элементы вектора "<<endl;

for(i=0; i<10; i++)

{

cout<<i+1<<"-ый элемент = ";

cin>>vektor[i];

}

}

void get(int **n)

{

*n=vektor;

}

};

class B: public A

{

public:

B()

{

cout<<"Работает конструктор по умолчанию производного класса"<<endl;

}

B(int *c)

{

cout<<"Работает конструктор с параметрами производного класса"<<endl;

vektor=c;

}

B(B &s)

{

cout<<"Работает конструктор копирования производного класса"<<endl;

vektor=s.vektor;

}

~B()

{

delete[] vektor;

cout<<"Деструктор производного класса"<<endl;

}

void poisk()

{

int q,w,*vv,j=0,i;

vv=new int[10];

for(i=0; i<10; i++)

{

if (vektor[i+1]>vektor[i])

{

q=i;

break;

}

}

for(i=q+1; i<10; i++)

{

if (vektor[i]<vektor[i-1])

{

w=i;

break;

}

}

for(i=0; i<10; i++)

{

if (i>=q && i<w)

continue;

vv[j]=vektor[i];

j++;

}

cout<<endl;

cout<<"Новый вектор"<<endl;

for(i=0; i<j; i++)

cout<<vv[i]<<" ";

}

};

void main ()

{

setlocale(LC_ALL,"rus");

int test[64] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

A a1,a2(test),a3(a2);

int *v, i;

B b1,b2(test),b3(b2);

cout<<endl;

b2.set();

cout<<endl;

b2.get(&v);

cout<<"Элементы вектора "<<endl;

for (i=0; i<10; i++)

cout<<v[i]<<" ";

cout<<endl;

b2.poisk();

cout<<endl;

system("pause");

}