Thank you! Consider this excerpt from a rather ordinary class representing a con
ID: 3826227 • Letter: T
Question
Thank you!
Consider this excerpt from a rather ordinary class representing a construction worker: class Worker public: Worker (string nm string s) ma name (nam) m skill (s) string name const f return m name; string skill const f return m skill; private string m name; string m skill; Because we did not declare a destructor, copy constructor, or assignment operator for the Worker class, the compiler writes those functions for us. A construction crew is a collection of workers. We choose to represent a crew as a dynamically allocated array of pointers to Workers. Here is an excerpt: Class Crew public Crew (int lim) m size (0), m Crew Size (lim) In Crew new Worker Elim] void hire (string nm, string s) if (m size m maxcrewsize) m crew size] new Worker (nm s) m size other functions not shown. private Worker In Crew pointer int m size; int m maxcrewSize;Explanation / Answer
//Below are the function required
Crew::Crew(const Crew &c1)
{
m_size = c1.m_size;
m_maxcrewsize = c1.m_maxcrewsize;
m_crew = new worker*[m_maxcrewsize];
for (int i = 0; i < m_size; i++)
{
m_crew[i] = new worker(c1.m_crew[i]->name(), c1.m_crew[i]->skill());
}
}
Crew& Crew::operator =(const Crew &c1)
{
m_size = c1.m_size;
m_maxcrewsize = c1.m_maxcrewsize;
for (int i = 0; i < m_size; i++)
{
m_crew[i] = new worker(c1.m_crew[i]->name(), c1.m_crew[i]->skill());
}
return *this;
}
Crew::~Crew()
{
for (int i = 0; i < m_size; i++)
delete m_crew[i];
}
//in case you need more information regarding the program flow/working please refer below full program
#include<iostream>
#include<string>
using namespace std;
class worker
{
public:
worker()
{
cout << "DEfault woker" << endl;
}
worker(string nm, string s) :m_name(nm), m_skill(s)
{
cout << "wrker const" << endl;
}
string name() const
{
return m_name;
}
string skill() const
{
return m_skill;
}
~worker()
{
cout << "worker dest" << endl;
}
private:
string m_name;
string m_skill;
};
class Crew
{
public:
Crew(int lim) :m_size(0), m_maxcrewsize(lim)
{
m_crew = new worker*[lim];
}
void hire(string nm, string s)
{
if (m_size < m_maxcrewsize)
{
m_crew[m_size] = new worker(nm, s);
m_size++;
}
}
Crew(const Crew &c1);
Crew & operator =(const Crew &c1);
~Crew();
private:
worker ** m_crew;
int m_size;
int m_maxcrewsize;
};
Crew::Crew(const Crew &c1)
{
m_size = c1.m_size;
m_maxcrewsize = c1.m_maxcrewsize;
m_crew = new worker*[m_maxcrewsize];
for (int i = 0; i < m_size; i++)
{
m_crew[i] = new worker(c1.m_crew[i]->name(), c1.m_crew[i]->skill());
}
}
Crew& Crew::operator =(const Crew &c1)
{
m_size = c1.m_size;
m_maxcrewsize = c1.m_maxcrewsize;
for (int i = 0; i < m_size; i++)
{
m_crew[i] = new worker(c1.m_crew[i]->name(), c1.m_crew[i]->skill());
}
return *this;
}
Crew::~Crew()
{
for (int i = 0; i < m_size; i++)
delete m_crew[i];
}
int main()
{
Crew n = Crew(10);
n.hire("abc", "c++");
n.hire("def", "java");
Crew n1 = n; //copy constructr called
Crew n2 = Crew(10);
n2 = n1; //assignment operator called
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.