From 959bc760ae370e07d00d68db34e958e032278a44 Mon Sep 17 00:00:00 2001 From: angeld55 Date: Fri, 9 Apr 2021 22:39:04 +0300 Subject: sem 7 --- Sem. 07/Person/Person.cpp | 40 +++++++++++++++++++ Sem. 07/Person/Person.h | 19 +++++++++ Sem. 07/Person/Source.cpp | 16 ++++++++ Sem. 07/PersonAdvanced/PersonAdvanced.cpp | 64 +++++++++++++++++++++++++++++++ Sem. 07/PersonAdvanced/PersonAdvanced.h | 28 ++++++++++++++ Sem. 07/PersonAdvanced/Source.cpp | 16 ++++++++ 6 files changed, 183 insertions(+) create mode 100644 Sem. 07/Person/Person.cpp create mode 100644 Sem. 07/Person/Person.h create mode 100644 Sem. 07/Person/Source.cpp create mode 100644 Sem. 07/PersonAdvanced/PersonAdvanced.cpp create mode 100644 Sem. 07/PersonAdvanced/PersonAdvanced.h create mode 100644 Sem. 07/PersonAdvanced/Source.cpp diff --git a/Sem. 07/Person/Person.cpp b/Sem. 07/Person/Person.cpp new file mode 100644 index 0000000..2786671 --- /dev/null +++ b/Sem. 07/Person/Person.cpp @@ -0,0 +1,40 @@ +#include +#include "Person.h" + +Person::Person(const char* name, int age) +{ + setName(name); + setAge(age); +} + + +void Person::setName(const char* name) +{ + if (strlen(name) >= 20) + { + strcpy(this->name, "Unknown"); + } + else + { + strcpy(this->name, name); + } +} + +void Person::setAge(int age) +{ + if (age<0 || age > 120) + age = 40; + this->age = age; +} +const char* Person::getName() const +{ + return name; +} +int Person::getAge() const +{ + return age; +} +void Person::print() +{ + std::cout << name << " " << age << std::endl; +} \ No newline at end of file diff --git a/Sem. 07/Person/Person.h b/Sem. 07/Person/Person.h new file mode 100644 index 0000000..499c744 --- /dev/null +++ b/Sem. 07/Person/Person.h @@ -0,0 +1,19 @@ +#pragma once + +class Person +{ +public: + Person(const char* name, int age); + + void setName(const char* name); + void setAge(int age); + + const char* getName() const; + int getAge() const; + + void print(); + +private: + char name[20]; + int age; +}; diff --git a/Sem. 07/Person/Source.cpp b/Sem. 07/Person/Source.cpp new file mode 100644 index 0000000..478d07a --- /dev/null +++ b/Sem. 07/Person/Source.cpp @@ -0,0 +1,16 @@ +#include +#include "Person.h" +using namespace std; + +int main() +{ + Person p("Ivan", 13); + Person p2("Petur", 12); + + p = p2; + + p2.setName("Aleks"); + p.print(); + p2.print(); + +} diff --git a/Sem. 07/PersonAdvanced/PersonAdvanced.cpp b/Sem. 07/PersonAdvanced/PersonAdvanced.cpp new file mode 100644 index 0000000..fbea6c3 --- /dev/null +++ b/Sem. 07/PersonAdvanced/PersonAdvanced.cpp @@ -0,0 +1,64 @@ +#include "PersonAdvanced.h" +#include + +PersonAdvanced::PersonAdvanced(const char* name, int age) : name(nullptr), age(age) +{ + setName(name); + setAge(age); +} + +PersonAdvanced::PersonAdvanced(const PersonAdvanced& other) +{ + copyFrom(other); +} + +PersonAdvanced& PersonAdvanced::operator = (const PersonAdvanced& other) +{ + if (this != &other) + { + free(); + copyFrom(other); + } + return *this; +} +PersonAdvanced::~PersonAdvanced() +{ + free(); +} + +const char* PersonAdvanced::getName() const +{ + return name; +} + +int PersonAdvanced::getAge() const +{ + return age; +} + +void PersonAdvanced::setName(const char* name) +{ + delete[] this->name; + this->name = new char[strlen(name) + 1]; + strcpy(this->name, name); +} +void PersonAdvanced::setAge(int age) +{ + if (age < 0 || age > 120) + age = 40; + this->age = age; +} + + +void PersonAdvanced::copyFrom(const PersonAdvanced& other) +{ + name = new char[strlen(other.name) + 1]; + strcpy(name, other.name); + + age = other.age; +} +void PersonAdvanced::free() +{ + delete[] name; + age = 0; +} \ No newline at end of file diff --git a/Sem. 07/PersonAdvanced/PersonAdvanced.h b/Sem. 07/PersonAdvanced/PersonAdvanced.h new file mode 100644 index 0000000..92e000e --- /dev/null +++ b/Sem. 07/PersonAdvanced/PersonAdvanced.h @@ -0,0 +1,28 @@ +#pragma once + +class PersonAdvanced +{ +public: + PersonAdvanced(const char* name, int age); + + PersonAdvanced(const PersonAdvanced& other); + PersonAdvanced& operator=(const PersonAdvanced& other); + ~PersonAdvanced(); + + void setName(const char* name); + void setAge(int age); + + const char* getName() const; + int getAge() const; + + void print(); + +private: + + void copyFrom(const PersonAdvanced& other); + void free(); + + + char* name; + int age; +}; diff --git a/Sem. 07/PersonAdvanced/Source.cpp b/Sem. 07/PersonAdvanced/Source.cpp new file mode 100644 index 0000000..8c92e6c --- /dev/null +++ b/Sem. 07/PersonAdvanced/Source.cpp @@ -0,0 +1,16 @@ +#include +#include "PersonAdvanced.h" +using namespace std; + +int main() +{ + PersonAdvanced p("Ivan", 13); + PersonAdvanced p2("Petur", 12); + + p = p2; + + p2.setName("Aleks"); + p.print(); + p2.print(); + +} -- cgit v1.3.1-23-gd82d