Kolokwium 2 W 1 CPP
Stworzyć klasę abstrakcyjną Body, zawierającą objętość ciała double vol, funkcji abstrakcyjne void calc_volume(), void disp(). Zadaniem calc_volume jest obliczenie objętości ciała, a disp() wyprowadza na monitor wynik obliczeń vol.
Stworzyć klasy pochodne Sphera i Cube.
Sphera zawiera:
double r; // promień
const double pi; // stałą pi
char *str; //wskaźnik do wiersza tekstowego - nazwa sphery.
Sphera(double rr, char *sstr); //Konstruktor sparametryzowany dynamicznie alokuje pamięć
//dla wiersza tekstowego str i inicjuje zmienne r, pi.
~Sphera(); //Destruktor zwalnia pamięć
void calc_volume(); //przesłonięta funkcja wirtualna w klasie Sphera liczy objętość spherzy
//4/3*pi*r3 .
void disp(); //wyprowadza na monitor str i vol.
Cube zawiera:
double a; // długość boku
char *str; //wskaźnik do wiersza tekstowego - nazwa kuby.
Cube(double aa, char *sstr); //Konstruktor sparametryzowany dynamicznie alokuje pamięć
//dla wiersza tekstowego str i inicjuje zmienną a.
~ Cube (); //Destruktor zwalnia pamięć
void calc_volume(); //przesłonięta funkcja wirtualna w klasie Cube liczy objętość kuby
//vol = a3 .
void disp(); //wyprowadza na monitor str i vol.
Nic nie zmieniając w kodzie funkcji main stworzyć program.
int _tmain(int argc, _TCHAR* argv[])
{
Body * ptr_tab[4];
ptr_tab[0] = new Sphera(1, "sphera A");
ptr_tab[1] = new Sphera(2, "sphera B");
ptr_tab[2] = new Cube(1, "cube C");
ptr_tab[3] = new Cube(2, "cube D");
for(size_t it=0; it<4; ++it)
{
ptr_tab[it]->calc_volume();
ptr_tab[it]->disp();
delete ptr_tab[it];
}
return 0;
}
Dla podanej klasy B i kodu funkcji main uzupełnić program tak, żeby działał poprawnie.
class B
{
double *ptr;
public:
B(double a[], size_t noit); //konstruktor: alokuje pamięć i kopiuje tablicę a do
//tablicy ptr
~B(); //destruktor: zwalnia pamięć
};
B::B(double a[], size_t noit)
{
ptr = new double [noit];
memcpy(ptr, a, noit*sizeof(double));
}
B::~B()
{
delete [] ptr;
}
int _tmain(int argc, _TCHAR* argv[])
{
double aa[] = {
0.1, 0.2, 0.3
};
double bb[] = {
10, 20, 30, 40
};
B ob1(aa, sizeof(aa)/sizeof(double)), ob2(bb, sizeof(bb)/sizeof(double));
cout << "ob1 " << ob1 << endl << "ob2 " << ob2 << endl;
ob2 = ob1;
cout << "ob2 " << ob2 << endl;
return 0;
}