Lab 2 (2)


C++

Lab_2

Konstruktor kopii

  1. Stworzyć nowy projekt. Dodać do projektu plik incl.h, w którym umieścić deklaracje klasy NODE_COORD:

class NODE_COORD

{

double *pcoord; //pcoord[0] - x, pcoord[1] - y

public:

NODE_COORD() : pcoord(NULL) {} //konstruktor domyślny

NODE_COORD(double x, double y); //konstruktor sparametryzowany

~NODE_COORD(); //destruktor

void disp(); //wyświetla na monitorze x, y

private:

void crash(); //obsługuje błąd alokowania pamięci

};

W pliku *.cpp dołożyć implementacje metod klasy

NODE_COORD::NODE_COORD(double x, double y)

{

try

{

pcoord = new double [2];

pcoord[0] = x;

pcoord[1] = y;

}

catch(bad_alloc)

{

crash();

}

}

void NODE_COORD::crash()

{

cout << "memory allocation error\n";

system("pause");

exit(1);

}

NODE_COORD::~NODE_COORD()

{

if(pcoord)

{

delete [] pcoord;

pcoord = NULL;

}

}

Funkcja main wykonuje testowanie obiektów klasy:

int _tmain(int argc, _TCHAR* argv[])

{

NODE_COORD A(2, 3);

NODE_COORD B = A;

NODE_COORD C;

NODE_COORD D = C;

system("pause");

return 0;

}

Uruchomić program, wyjaśnić przyczynę niepowodzenia i poprawić kod tak, żeby działał poprawnie.

  1. Dodać do zadania klasę Triangle, która zawiera trzy wierzchołki NODE_COORD vert_A, NODE_COORD vert_B, NODE_COORD vert_C oraz wiersz tekstowy str[128], przeznaczony dla przechowywania nazwy trójkąta (na przykład, „trojkat 1”). Dla wprowadzenia danych użyć konstruktor sparametryzowany. Przy tym uniknąć operatora przypisania. Klasa Triangle powinna mieć metodę disp() wyświetlania współrzędnych każdego z wierzchołków, wywołując metodę klasy disp() dla obiektu każdego z wierzchołków. Deklaracje klasy Triangle umieścić w pliku triangle.h, a implementacje metod klasy - w pliku triangle.cpp. Funkcja main wygląda następująco:

int _tmain(int argc, _TCHAR* argv[])

{

NODE_COORD A(2, 3);

NODE_COORD B = A;

NODE_COORD C;

NODE_COORD D = C;

NODE_COORD AA(2, 3), BB(3,4), CC(0, 0);

Triangle tr(AA, BB, CC, "trojkat 1");

tr.disp();

system("pause");

return 0;

}

  1. Stworzyć funkcje o nazwie void fun(Triangle trr), która pobiera obiekt typu Triangle i wywołuje metodę disp dla wyświetlania na monitorze. Przeciążyć tą funkcje void fun(Triangle *trr) i zrobić to samo, tylko korzystając wskaźnikiem do obiektu Triangle. Funkcja main teraz wygląda tak:

int _tmain(int argc, _TCHAR* argv[])

{

NODE_COORD A(2, 3);

NODE_COORD B = A;

NODE_COORD C;

NODE_COORD D = C;

NODE_COORD AA(2, 3), BB(3,4), CC(0, 0);

Triangle tr(AA, BB, CC, "trojkat 1");

tr.disp();

my_fun(tr);

my_fun(&tr);

system("pause");

return 0;

}

Za pomocą debug'iera wyjaśnić różnicę przy wywołaniu funkcji pierwszej i drugiej.



Wyszukiwarka

Podobne podstrony:
spis lab I sem 2010
III WWL DIAGN LAB CHORÓB NEREK i DRÓG MOCZ
Diagnostyka lab wod elektrolit
ZW LAB USTAWY, OCHRONA
LAB PROCEDURY I FUNKCJE
sprzet lab profilografy
sprzet lab mikromanometry
Mechanika Plynow Lab, Sitka Pro Nieznany
Lab 02 2011 2012
PO lab 5 id 364195 Nieznany
lab pkm 4
MSIB Instrukcja do Cw Lab krystalizacja
lab [5] id 258102 Nieznany
lab 8 9 1
lab 3 2 9
IE RS lab 11 solutions
5 MDE lab nr 5 ogniwa fotogalwaniczne
lab pkm 5

więcej podobnych podstron