Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
119 changes: 96 additions & 23 deletions 1/1.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,62 @@
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;

class Person {
public:

Person(const string& name) {
this->name = name;

}
Person(){};
Person(const string n, const int a){
this->name = n;
this->age = a;
}
string& getName() { return name; }
bool operator <(const Person p)
{
if ( name < p.name)
return true;
else
return false;
}
bool operator ==(const Person p)
{
if (age == p.age)
return true;
else
return false;
}
friend class Group;
friend ostream& operator<<(ostream& out, const Person& p);

private:
string name;
int age;

};

ostream& operator<<(ostream& out, const Person& p) {
cout << p.getName();
ostream& operator<<(ostream& out, Person& p) {
cout << p.getName() ;
return out;
}



class Group {
public:

Group(){};
Group(Group& g){
cap = g.cap;
size = g.size;
this->members = new Person[g.cap];
for(int i=0; i < size; i++){
members[i] = g.members[i];
}
}
Group(int max_lenght) {
this->cap = max_lenght;
this->members = new Person[max_lenght];
Expand All @@ -46,17 +75,59 @@ 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];
}
size--;
}
Group& operator=(const Group g){
this->cap = g.cap;
this->size = g.size;
this->members = new Person[g.cap];
for (int i = 0; i < size; i++) {
this->members[i] = g.members[i];
}
return *this;
}

Group operator+(const Group g){
Group outPut(cap + g.cap);
int i = 0, j =0;
for (; i < size; i++){
outPut.members[i] = members[i];
}
for(; j < g.size; j++){
outPut.members[i] = g.members[j];
i++;
}
return outPut;
}
Group& operator+=(Group g){
Person* tmp = new Person[g.cap + cap];
int i = 0, j =0;
for (; i < size; i++) {

tmp[i] = members[i];
}
for (; j < g.size; j++) {

tmp[i] = members[j];
i++;
}
members = tmp;
cap += g.cap;
size += g.size;
return *this;
}

~Group() {
delete[] members;
}
friend bool isGroupFull(Group g);
friend ostream& operator<<(ostream& out, const Group& g);
friend class Person;

private:
int size;
Expand All @@ -68,36 +139,39 @@ class Group {
bool isGroupFull(Group g) {
return (g.size == g.cap);
}
ostream& operator<<(ostream& out, const Group& g) {
for (int i = 0; i < g.size; i++)
out << g.members[i] << "\t";
return out;
}

int main()
{
/*

Person p1("somename");
Person p1("somename2");
cout << p1<<p2;
*/
/*
Person p2("somename2");// change it to p2 becouse of redefinition
cout << p1<< endl << p2;


Group g1(5);
g1.add({ "Erfan",20 });
g1.add({ "Saba",20 });
g1.add({ "Mahrokh",20 });
g1.add({ "Yasin",21 });
cout<<isGroupFull(g1)<<endl;
*/
/*

Group g2(g1);
Group g3(10);
g2.deletePerson("Erfan");
cout << g1<<endl;//should cout every person in it with a \t as the separator
cout << g2 << endl;
*/
/*

g3 = g1;
cout << g3;
g3 = g2 + g3;//adds members of g2 and g3 to each other
g3 += g3 += g3 += g3;
*/
/*


Person persons[10];
Person Erfan("Erfan",20);
persons[1]=Erfan;
Expand All @@ -107,12 +181,11 @@ int main()
sort(persons,persons+10);//what operator should be overloaded for sort? :)

for(int i=0;i<10;i++){
cout<<persons[i].getName()<<' ';
}*/
/*
cout<<*find(persons,persons+10,Erfan);
*/

cout<<persons[i].getName()<<' ' ;
}

cout << endl <<*find(persons,persons+10,Erfan);




Expand Down
31 changes: 30 additions & 1 deletion 2/Score.cpp
Original file line number Diff line number Diff line change
@@ -1,12 +1,41 @@
#include "Score.h"
int Score::ID_generator = 0;

Score::Score(int score,char* detail, Label label) :ID(Score::ID_generator) {
this->score = score;
this->label = label;
this->detail = detail;

ID_generator++;

}
Score::Score():ID(ID_generator) {
label = GOOD;
score = 0;
detail = " ";
ID_generator++;
}
Score::Score(int s, string d, Label l):ID(ID_generator) {
this->score = s;
this->detail = d;
this->label = l;
ID_generator ++;

}
Score& Score::operator= (const Score& s) {
score = s.score;
detail = s.detail;
label = s.label;
return *this;
}
void print(const Score& s) {
cout << "Score: " << s.score << endl;
cout << "Detail: " << s.detail << endl;
cout << "Lable: " << s.label << endl;
cout << "ID: " << s.ID << endl;
}
void setID_generator(int id) {
Score::ID_generator = id;
return ;
}


9 changes: 7 additions & 2 deletions 2/Score.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ using namespace std;
class Score {
public:
friend void print(const Score& score);

typedef enum {
GREAT,
GOOD,
Expand All @@ -13,13 +12,19 @@ class Score {
}Label;

Score(int score, char* detail, Label label);
Score();
Score(int s, string d, Label l);
Score& operator= (const Score& S);
friend void setID_generator(int id);
friend int main();
private:
int score;
Label label;
string detail;
const int ID;
static int ID_generator;
};

void setID_generator(int id);
void print(const Score& s);


6 changes: 2 additions & 4 deletions 2/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,9 @@ using namespace std;
#define FOR(n) for(int i=0;i<n;i++)
#define SETSCORE(i) int score=rand()%20+1;/*no 0s*/\
scores[i] = Score( score,("some string " + to_string(i)).c_str(),Score::Label(3-score/5)) ;


int main()
{

srand(time(NULL));

Score s1(1, "do better next time", Score::BAD);
Expand All @@ -26,7 +24,7 @@ int main()
FOR(10) {
print(scores[i]);
}
Score::setID_generator(Score::ID_generator+100);//just a setter for ID_generator
setID_generator(Score::ID_generator+100);//just a setter for ID_generator

}