Рекомендация: прочитайте задачу! Выполните ее и сравните полученный результат с картинкой CMD
Если вы полностью уверены что не можете осилить эту задачу, советую вам просмотреть код и полностью в нем разобраться! Протестировать все в отладчике!
Разработать класс Person, который содержит соответствующие члены для хранения:• имени,
• возраста,
• пола
и • телефонного номера.
Напишите функции-члены, которые смогут изменять эти члены данных индивидуально.
Напишите функцию-член Person::Print(), которая выводит отформатированные данные о человеке.
#include <iostream>
#include <string>
#include <new>
using namespace std;
#define STOP_CMD system("pause>>void");
#define COLOR_CMD system("color 0A");
#define CLEAR_CMD system("CLS");
#define SPACE cout << endl;
class Person
{
public:
Person() //
{
age = 0;
name = new char[1]();
cout << "***CONSTRUCT NO PARAMETRS***" << endl;
}
Person(const char* str, int a, string g, string p);
~Person() {
delete[] name;
cout << "DESTRUCT DELETE NAME\nplease any key:" << endl;
STOP_CMD
cout << "DISTRUCT DELETE DATA\nplease any key:" << endl;
STOP_CMD
}
void Print() {
cout << "Name ->" << " " << name << "\n" << "Age ->" << " " << age << "\n"
<< "Gender ->" << " " << gender << "\n" << "Phone ->" << " " << phone << endl;
}
//-------------------------------------
char * Get_Name() {
return name;
}
void Set_Name(const char* str) {
name = new char[strlen(str) + 1];
for (int i = 0; i < strlen(str) + 1; ++i)
name[i] = str[i];
}
//-------------------------------------
int Get_Age() {
return age;
}
void Set_Age(int a) {
this->age = a;
}
//-------------------------------------
string Get_gender() {
return gender;
}
void Set_Gender(string g) {
this->gender = g;
}
//-------------------------------------
string Get_Phone() {
return phone;
}
void Set_phone(string p) {
this->phone = p;
}
//-------------------------------------
private:
char* name;
int age;
string gender;
string phone;
};
Person::Person(const char* str, int a, string g, string p) :name(new char[strlen(str) + 1]()) { // CREATE ARR[CHAR]
cout << "***CONSTRUCTOR WITH PARAMETRS***" << endl; SPACE
age = a;
gender = g;
phone = p;
if(strlen(str) > 0)
for (int i = 0; i < strlen(str) + 1; i++) { //COPY
name[i] = str[i];
}
}
int main() {
COLOR_CMD
Person ob2;
ob2.Print();
SPACE
Person ob1("Igor", 29, "MAN", "0935114814");
ob1.Print();
SPACE
Person ob3;
ob3.Set_Name("Vladimir");
ob3.Print();
SPACE
Person ob4;
ob4.Set_Gender("MANCHIK");
ob4.Print();
return 0;
}
Создайте программу, имитирующую многоквартирный дом. Необходимо иметь классы «Человек», «Квартира», «Дом». Класс «Квартира» содержит динамический массив объектов класса «Человек». Класс «Дом» содержит массив объектов класса «Квартира». Каждый из классов содержит переменные-члены и функ- ции-члены, которые необходимы для предметной области класса. Обращаем ваше внимание, что память под стро- ковые значения выделяется динамически. Например, для ФИО в классе «Человек». Не забывайте обеспечить классы различными конструкторами (конструктор копирования обязателен), деструкторами. В main протестировать ра- боту полученного набора классов.
#include <iostream>
#include <string>
using namespace std;
#define STOP_CMD system("pause>>void");
#define COLOR_CMD system("color 0A");
class Person
{
public:
Person() {}
Person(string n, string s, string m);
Person(const Person &ob);
void Print() {
cout << "NAME = " << this->name << endl;
cout << "SURNAME = " << this->surname << endl;
cout << "MIDDLE NAME = " << this->Middle_Name << endl;
}
private:
string name;
string surname;
string Middle_Name;
};
Person::Person(string n, string s, string m) {
this->name = n;
this->surname = s;
this->Middle_Name = m;
}
Person::Person(const Person &ob) {
this->name = ob.name;
this->surname = ob.surname;
this->Middle_Name = ob.Middle_Name;
}
class Apartment
{
public:
Apartment() :ob(nullptr), SIZE(0) {};
Apartment(Person & o, int SIZE); // SIZE COUNT = OB->PERSON
Apartment(const Apartment &obj);
~Apartment() {
cout << "DESTRUCTOR class[Apartment] adress = " << this << endl;
delete[] ob;
ob = nullptr;
}
void print() {
for (int i = 0; i < SIZE; i++)
this->ob[i].Print();
}
private:
Person * ob;
int SIZE;
};
Apartment::Apartment(Person & o, int SIZE) { // SIZE COUNT = OB->PERSON
ob = new Person;
this->ob = & o;
this->SIZE = SIZE;
}
Apartment::Apartment(const Apartment &obj) {
this->ob = obj.ob;
this->ob = new Person;
this->SIZE = obj.SIZE;
}
class House
{
public:
House() :ob(nullptr) {};
House(Apartment & o);
House(const House &obj);
~House() {
cout << "DESTRUCTOR class[House] adress = " << this << endl;
ob = nullptr;
}
void print() {
this->ob->print();
}
private:
Apartment * ob;
};
House::House(Apartment & o) {
this->ob = & o;
}
House::House(const House &obj) {
this->ob = obj.ob;
}
int main() {
COLOR_CMD
//-----------------------------------------------------
Person * arr = new Person[5]; //ARRAY OBJ -> PERSON
arr[0] = { "Igor", "Dombrovsky", "Vladimirovich" };
arr[1] = { "Vladimir", "Dombrovsky", "Vladimirovich" };
arr[2] = { "Petro", "Ivanovich", "STEP" };
arr[3] = { "Hello", "World", "Academy" };
arr[4] = { "C++", "PHP", "JS" };
//-----------------------------------------------------
Apartment ob_Apartment(*arr, 5); // INT = COUNT OBJ->PERSON
//-----------------------------------------------------
House ob_House(ob_Apartment);
ob_House.print(); // OUTPUT ELEMENTS PERSON
//-----------------------------------------------------
arr = nullptr;
STOP_CMD
return 0;
}
Разработать класс Reservoir (водоем). Класс должен обяза- тельно иметь поле «название». Класс должен содержать: конструктор по умолчанию, конструктор с параметрами, при необходимости реализовать деструктор и конструк- тор копирования.
Добавить методы для: 1. Определения приблизительного объема (ширина* длина*максимальная глубина); 2. Определения площади водной поверхности; 3. Метод для проверки относятся ли водоемы к одному типу (море-море; бассейн-пруд); 4. Для сравнения площади водной поверхности водоемов одного типа; 5. Для копирования объектов; 6. Остальные методы на усмотрение разработчика (ме- тоды set и get). Написать интерфейс для работы с классом. Реализовать динамический массив объектов класса с возможностью добавления, удаления объектов из массива.
/*
Task 3
Dombrovsky Igor group 32PPS11
*/
#include <iostream>
#include <string>
using namespace std;
#define STOP_CMD system("pause >> void");
#define COLOR_CMD system("color 0A");
class Reservoir {
public:
Reservoir() :width(0), depth(0), length(0), Sum(0), size(0), arr(NULL){}
Reservoir(double w, double d, double l, int s) {
this->width = w;
this->depth = d;
this->length = l;
this->size = s;
this->arr = new Reservoir[size];
}
Reservoir(const Reservoir &ob);
~Reservoir() {
cout << "destructor work " << this << endl;
delete[] arr;
STOP_CMD
size = 0;
arr = NULL;
}
double Get_Volume() {
return width * depth * length;
}
void Set_Volume(double w, double d, double l, int s) {
this->width = w;
this->depth = d;
this->length = l;
this->size = s;
this->arr = new Reservoir[size];
}
double Get_Square() {
Sum = (length * width) + ((length * depth) * 2) + ((width * depth) * 2);
return Sum;
}
private:
Reservoir * arr;
int size;
double width;
double depth;
double length;
double Sum;
};
void check(Reservoir &ob) {
if (ob.Get_Square() > 5000)
cout << "SEA object area = " << ob.Get_Square() << endl;
else if (ob.Get_Square() > 2000)
cout << "POND object area = " << ob.Get_Square() << endl;
else if (ob.Get_Square() < 2000 && ob.Get_Square() > 0)
cout << "SWIMMING POOL object area = " << ob.Get_Square() << endl;
else if (ob.Get_Square() == 0) {
cout << "object area = " << ob.Get_Square() << endl;
}
else
cout << "I not know" << endl;
}
void Comparison(Reservoir &ob1, Reservoir &ob2) {
if (ob1.Get_Square() == ob2.Get_Square())
cout << "Area is equal to" << endl;
else
cout << "Area is not equal" << endl;
}
Reservoir::Reservoir(const Reservoir ©) {
this->size = copy.size;
this->arr = new Reservoir[size];
for (int i = 0; i < size; i++)
arr[i] = copy.arr[i];
}
int main() {
COLOR_CMD
Reservoir * ob = new Reservoir[5];
ob[0] = {100, 2, 40, 5}; // w, d, l, s
ob[1] = { 500, 5, 325.50, 5 };
ob[2] = { 400, 5, 325.50, 5 };
ob[3] = { 900, 3, 11.7, 5 };
ob[4] = { 50, 2, 100, 5 };
check(ob[0]);
Comparison(ob[0], ob[1]);
ob = NULL;
STOP_CMD
return 0;
}
Разработать класс String, который в дальнейшем будет использоваться для работы со строками. Класс должен содержать: • Конструктор по умолчанию, позволяющий создать строку длиной 80 символов; • Конструктор, позволяющий создавать строку произ- вольного размера; • Конструктор, который создаёт строку и инициализи- рует её строкой, полученной от пользователя. • Необходимо создать деструктор, а также использовать механизмы делегирования конструкторов, если это возможно. • Класс должен содержать методы для ввода строк с кла- виатуры и вывода строк на экран.
/*
Task 4
Dombrovsky Igor Vladimirovich
*/
#include <iostream>
using namespace std;
#define STOP_CMD system("pause >> void");
#define COLOR_CMD system("color 0A");
class String {
public:
String() {
this->SIZE = 80;
this->str = new char[SIZE]();
iteration = 0;
}
String(int size) {
this->str = new char[size]();
}
String(char * s) {
this->str = new char[strlen(s) + 1]();
iteration = 0;
while(s[iteration] != '\0') {
str[iteration] = s[iteration];
iteration++;
}
}
String(const String &ob) {
this->SIZE = ob.SIZE;
this->str = new char[SIZE]();
iteration = 0;
while (ob.str[iteration] != '\0') {
str[iteration] = ob.str[iteration];
iteration++;
}
}
~String() {
cout << "DESTRUCTOR ADRESS = " << this << endl;
STOP_CMD
delete[] str;
}
char Get_STR() {
return * str;
}
void Set_STR(char * s) {
this->str = new char[strlen(s) + 1]();
iteration = 0;
while (s[iteration] != '\0') {
str[iteration] = s[iteration];
iteration++;
}
}
void Print() {
iteration = 0;
while (str[iteration] != '\0') {
cout << str[iteration];
iteration++;
}
}
private:
char * str;
int SIZE;
int iteration;
};
int main() {
COLOR_CMD
char s[] = "Hello\n";
String st(s);
st.Print();
char str[] = "Hello World!\n";
st.Set_STR(str);
st.Print();
String stri;
char stroka[] = "************Igor Dombrovsky group 32PPS11************\n";
stri.Set_STR(stroka);
stri.Print();
STOP_CMD
return 0;
}