Контрольная работа 12 вариант (Николаенко)
.docxМинистерство образования Республики Беларусь
Учреждение образования
«БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ»
Институт информационных технологий
Специальность Программное обеспечение информационных технологий
КОНТРОЛЬНАЯ РАБОТА
По курсу Объектно-ориентированные технологии программирования и стандарты проектирования
Вариант № 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");
}