Kolokwium II Poprawkowy 2012

Dla podanego programu odnaleźć błędy i poprawić:

#pragma warning ( disable : 4996 )

class A

{

char *str; //wiersz tekstowy

public:

A() : str(NULL) {} //konstruktor domyślny

A(char *sstr); //konstruktor sparametryzowany

~A() { delete [] str; }

A operator + (const A & ob) const //sklejanie dwуch wiersze tekstowych

private:

void alloc(size_t dim);

};

A::A(char *sstr)

{

size_t dim = strlen(sstr)+1;

alloc(dim);

strcpy(str, sstr);

}

class B

{

A *pA; //tablica obiektуw A

size_t nn; //liczba elementуw tablicy

public:

B(size_t n, A *ptab); //konstruktor sparametryzowany

B() : pA(NULL), nn(0) {} //konstruktor domyślny

~B() { delete [] pA; }

friend ostream & operator << (ostream &strm, const B & ob);

};

B::B(size_t n, A *ptab)

{

nn = n;

try {

pA = new A [n];

for(size_t it=0; it<n; ++it)

pA[it] = ptab[it];

}

catch(bad_alloc) {

//……………..

}

}

ostream & operator << (ostream &strm, const B & ob)

{

if(ob.pA) {

for(size_t it=0; it<ob.nn; ++it)

strm << ob.pA[it];

}

return strm;

}

B fun()

{

A tab[] = {A("aaa"), A("bbb"), A("ccc"), A(" ")};

tab[3] = tab[1]+tab[2];

size_t n = 4;

B tmp(n, tab);

return tmp;

}

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

{

B obb = fun();

B obb1;

obb1 = obb;

cout << obb1;

return 0;

}