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;
}