diff --git a/1/1.cpp b/1/1.cpp index b83dbef..d02bde6 100644 --- a/1/1.cpp +++ b/1/1.cpp @@ -1,7 +1,15 @@ +/*?????? +* Complex Number (Part 1) +* AP ??? ?? ???????? +* 1403/1/23 +* ???????? ????? +*/ #include #include #include +#include + using namespace std; class Person { @@ -9,9 +17,29 @@ class Person { Person(const string& name) { this->name = name; - } - string& getName() { return name; } + Person(const string& _name,int _age) { + this->name = _name; + this->age = _age; + } + Person() { name = ""; age = 0; } + + //Add distructor + ~Person(){} + + string& getname() { return name; } + string getname() const { return name; } + + void setname(string _name) { name=_name; } + void setage(int _age) { age = _age; } + int getage() const { return age; } + + //Overload boolian operator + bool operator<(const Person& p) { return stoi(name) < stoi(p.name); } + bool operator==(const Person& p) { return name == p.name; } + + friend class Group; + friend ostream& operator<<(ostream& out, const Person& p); private: string name; @@ -20,20 +48,35 @@ class Person { }; ostream& operator<<(ostream& out, const Person& p) { - cout << p.getName(); + cout << p.getname()<cap = max_lenght; this->members = new Person[max_lenght]; this->size = 0; } + Group(Group& g) { + this->cap =g.cap; + this->members = new Person[g.cap]; + this->size = 0; + + for (int i = 0; i < g.size; i++) { + this->members[i].name = g.members[i].name; + this->members[i].age = g.members[i].age; + this->size++; + } + } + Group() { + cap = 0; + size = 0; + } + void add(Person p) { if (this->size == this->cap) { return; @@ -46,7 +89,6 @@ class Group { for (i = 0; i < size; i++) { if(members[i].name == name) break; - } for (int index = i; index < size - 1; index++) { members[index] = members[index + 1]; @@ -58,6 +100,74 @@ class Group { delete[] members; } + //Overloading operators + Group operator+(const Group& g) { + Group result; + result.cap = cap + g.cap; + result.size = size + g.size; + result.members = new Person[result.cap]; + + int i = 0; + for (i = 0; i < size; i++) { + result.members[i].name = members[i].name; + result.members[i].age = members[i].age; + } + + for (int j = 0; j < g.size; j++) { + result.members[i].name = g.members[j].name; + result.members[i].age = g.members[j].age; + i++; + } + + return result; + } + + Group& operator+=(const Group& g) { + int new_size = size + g.size; + int new_cap = cap + g.cap; + Person* new_members = new Person[new_cap]; + + for (int i = 0; i < size; i++) { + new_members[i].name = members[i].name; + new_members[i].age = members[i].age; + } + + for (int j = 0; j < g.size; j++) { + new_members[size + j].name = g.members[j].name; + new_members[size + j].age = g.members[j].age; + } + + delete[] members; + members = new_members; + size = new_size; + cap = new_cap; + + return *this; + } + + Group& operator=(const Group& g) { + if (this == &g) { + return *this; + } + + delete[] members; + + cap = g.cap; + size = g.size; + members = new Person[cap]; + + for (int i = 0; i < size; i++) { + members[i].name = g.members[i].name; + members[i].age = g.members[i].age; + } + + return *this; + } + + //Friends + friend bool isGroupFull(Group g); + friend ostream& operator<<(ostream& out, Group g); + private: int size; int cap; @@ -65,61 +175,60 @@ class Group { }; +ostream& operator<<(ostream& out, Group g) { + for (int i = 0; i < g.size; i++) { + out << g.members[i].getname() << "\t"; + } + return out; +} + bool isGroupFull(Group g) { return (g.size == g.cap); } int main() { - /* Person p1("somename"); - Person p1("somename2"); + Person p2("somename2"); cout << p1<score = score; this->label = label; @@ -8,5 +10,41 @@ Score::Score(int score,char* detail, Label label) :ID(Score::ID_generator) { ID_generator++; } +Score::Score(int score, const char* _detail, Label label) :ID(Score::ID_generator),detail(_detail) { + this->score = score; + this->label = label; + + ID_generator++; +} +Score::Score(int score, string detail, Label label) :ID(Score::ID_generator) { + this->score = score; + this->label = label; + this->detail = detail; + ID_generator++; + +} +Score::Score() :ID(Score::ID_generator) { + this->score = 0; + this->detail = ""; + ID_generator++; +} + +void Score::setID_generator(int num) { ID_generator = num; } + +Score& Score::operator=(const Score& S) +{ + this->score = S.score; + this->detail = S.detail; + this->label = S.label; + + return *this; +} +void print(const Score& score) +{ + cout << endl << "ID -> " << score.ID << endl; + cout << "Score -> " << score.score << endl; + cout << "Lable -> " << score.label << endl; + cout << "Detail -> " << score.detail << endl; +} \ No newline at end of file diff --git a/2/Score.h b/2/Score.h index 0dd79cb..339f89b 100644 --- a/2/Score.h +++ b/2/Score.h @@ -1,8 +1,13 @@ +#pragma once #include #include + using namespace std; + class Score { public: + + friend int main(); friend void print(const Score& score); typedef enum { @@ -12,7 +17,15 @@ class Score { BAD, }Label; + Score(); Score(int score, char* detail, Label label); + Score(int score, string detail, Label label); + Score(int score, const char* _detail, Label label); + + Score& operator=(const Score& S); + + static void setID_generator(int num); + private: int score; Label label; diff --git a/2/main.cpp b/2/main.cpp index 64d213e..6b3624d 100644 --- a/2/main.cpp +++ b/2/main.cpp @@ -5,7 +5,9 @@ #include #include "Score.h" #include "SomeRandomDotHFile.h" + using namespace std; + #define FOR(n) for(int i=0;i