ООП
.docМинистерство образования Республики Беларусь
Учреждение образования
БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Контрольная работа по курсу
"Объектно-ориентированное программирование"
Вариант № 3
Разработать класс содержащий:
-компонентные данные
-методы
а) конструктор по умолчанию
б) конструктор с параметрами
в) конструктор копирования
г) деструктор
д) методы класса для работы с данными
Данные класса должны иметь атрибут private
Задача 1
Создать 2 объекта разработанного класса. Одной из компонент класса является символьная строка. В результате выполнения программы в строке первого объекта исключить символы, введенные с клавиатуры. Содержимое объектов (их строки) до и после обмена вывести на экран.
#include "stdafx.h"
#include <string.h>
#include <iostream>
using namespace std;
class MyClass
{
private:
char str[100], strdel[100];
public:
MyClass(){};
MyClass(char *);
~MyClass();
void Show ();
void Input();
void Input2();
void Delete();
};
MyClass::MyClass(char *s)
{
strcpy(str,s);
}
MyClass::~MyClass()
{
strcat(str,"");
}
void MyClass::Show()
{
cout << "New String: " << str << endl;
}
void MyClass::Input2()
{
cout << "Enter Symbol for Deleted: ";
cin >> strdel;
}
void MyClass::Input()
{
cout << "Enter String: ";
cin >> str;
}
void MyClass::Delete()
{
char st1[100]="", st2[100]="";
int c=0;
for (int i = 0 ; i < strlen(strdel); i++)
{
strcpy(st1,str);
for (int j = 0; j < strlen(st1); j++)
if (strdel[i] != st1[j])
{
st2[c] = st1[j];
c++;
};
strcpy(str,st2);
// очистка буфера для вывода
memset(st2, 0, sizeof(st2));
c=0;
}
}
int main()
{
MyClass E1, E2;
E1.Input();
E1.Input2();
E1.Delete();
E1.Show();
getch();
return 0;
}
Задача 2
Создать 2 объекта разработанного класса. Одной из компонент класса является символьная строка. В результате выполнения программы в обоих объектах поменять местами первое и последнее слова строки. Содержимое объектов (их строки) до и после обмена вывести на экран.
#include "stdafx.h"
#include <string.h>
#include <iostream>
using namespace std;
class MyClass
{
private:
char str[100], buf1[100], buf2[100], buf3[100];
int length;
public:
MyClass();
MyClass(char *);
~MyClass();
void Show ();
int SearchPos(char*, int, char); // метод для поиска позиции
void Input();
void Revers(); //метода для замены слов местами
};
MyClass::MyClass()
{
memset(str, 0, sizeof(str));
memset(buf1, 0, sizeof(buf1));
memset(buf2, 0, sizeof(buf2));
memset(buf3, 0, sizeof(buf3));
}
MyClass::MyClass(char *s)
{
strcpy(str,s);
}
MyClass::~MyClass()
{
memset(str, 0, sizeof(str));
}
void MyClass::Show()
{
cout << "New String: " << str << endl;
}
void MyClass::Input()
{
int n=0;
char ch;
cout << "Enter String: ";
// цикл для записи предложения с пробелами (выход нажание кл. ENTER)
do
{
ch = getche();
if (ch != 13)
str[n++] = ch;
else
{
str[n++] = '\0';
cout << endl;
};
}while (ch != 13);
length=(int)strlen(str);
}
int MyClass::SearchPos(char *string, int len, char regim)
{ // gegim: 'B' - begin (первое слово), 'E' - end (последнее)
int i=0;
if (regim == 'B')
{
for (i=0; i<len; i++)
if (string[i]==' ') {break;}
}else{
for (i=len; i>0; i--) if (string[i]==' '){break;}
}
return i;
}
void MyClass::Revers()
{
for(int i=0; i<(SearchPos(str,length,'B')); i++) // записываем первое слово
buf1[i] = str[i];
int k=0;
int j=0;
int s = SearchPos(str,length,'E')+1; // чтобы не потерять последний пробел
for(int i = (SearchPos(str,length, 'B')); i<s; i++){ //записываем то что между первым и последним словами
buf2[k]=str[i];
k++;
}
if(str[length-1]=='.') length--; // проверка стоит ли вконце точка
for(int i = s; i < length; i++){ //записываем последнее слово
buf3[j]=str[i];
j++;
}
if(str[length]=='.') buf1[strlen(buf1)]='.';
strcpy(str,buf3);
strcat(str,buf2);
strcat(str,buf1);
}
int main()
{
MyClass E1, E2;
E1.Input();
E1.Revers();
E1.Show();
getch();
return 0;
}
Задача 3
Создать несколько объектов (например а и b) разработанного класса. Класс – символьная строка. Реализовать для объектов данного класса перегрузку операции + (c=a+b). Содержимое объектов (a,b,c, их строк), до и после операции, вывести на экран.
#include "stdafx.h"
#include <string.h>
#include <iostream>
using namespace std;
class MyClass
{
private:
char str[100];
public:
MyClass(){strcpy(str,"");};
MyClass(char *);
~MyClass();
MyClass operator+(MyClass&);
void operator=(MyClass&);
void Show ();
void Input();
};
MyClass::MyClass(char *s)
{
strcpy(str,s);
}
MyClass::~MyClass()
{
strcpy(str,"");
}
void MyClass::Show()
{
cout << "New String: " << str << endl;
}
void MyClass::Input()
{
cout << "Enter String: ";
cin >> str;
}
MyClass MyClass::operator +(MyClass &MC)
{
//копирование с добавление в конец строки
strcat(str,MC.str);
return *this;
}
void MyClass::operator =(MyClass &MC)
{
strcpy(str,MC.str);
}
int main()
{
MyClass a, b, c;
a.Input();
b.Input();
c=a+b;
c.Show();
getch();
return 0;
}
Задача 4
Создать несколько объектов (например, a и b) разработанного класса. Класс – символьная строка. Реализовать для объектов данного класса перегрузку операции -- (b=a--). Содержимое объектов (a,b, их строк), до и после выполнения операции, вывести на экран.
#include "stdafx.h"
#include <string.h>
#include <iostream>
using namespace std;
class MyClass
{
private:
char str[100];
public:
MyClass(){strcpy(str,"");};
MyClass(char *);
~MyClass();
MyClass operator--();
void operator=(MyClass&);
void Show ();
void Input();
};
MyClass::MyClass(char *s)
{
strcpy(str,s);
}
MyClass::~MyClass()
{
strcpy(str,"");
}
void MyClass::Show()
{
cout << "New String: " << str << endl;
}
void MyClass::Input()
{
cout << "Enter String: ";
cin >> str;
}
MyClass MyClass::operator --()
{
char str1[100]="";
for (int i=0; i < strlen(str)-1; i++)
str1[i]=str[i];
//копирование с заменой
strcpy(str,str1);
return *this;
}
void MyClass::operator =(MyClass &MC)
{
strcpy(str,MC.str);
}
int main()
{
MyClass a, b;
a.Input();
b=a--;
b.Show();
getch();
return 0;
}