Cześć,będę miał w przyszłym tyg egzamin z programowania obiektowego gdzie w części praktycznej jest zadanie w którym trzeba zinterpretować kod pod względem tego co wypisze na ekran. Przyklad:
Jaki będzie wynik (wydruk) działania następującego kodu?
static int c = 0;
class B;
class A{
int n;
B *bp;
A *ap;
public:
A(int nn);
~A();
};
class B{
int n;
A *ap;
B *bp;
public:
B(int nn);
~B();
};
A::A(int nn) : n(nn), bp(0), ap(0){
c++;
if (n > 0){
bp = new B(n - 1);
ap = new A(n - 1);
}
}
A::~A(){
if (bp) delete bp;
cout << 'A';
if (ap) delete ap;
}
B::B(int nn) : n(nn), bp(0), ap(0){
c++;
if (n > 0){
ap = new A(n - 1);
bp = new B(n - 1);
}
}
B::~B(){
if (bp) delete bp;
cout << 'B';
if (ap) delete ap;
}
int main(){
{ A x(3); }
cout << endl << c << endl;
return 0;
}
I o ile wiem jaka bedzie wartosc zmiennej statycznej c bo potrafie śledzić kolejnosc wywolan konstruktora to ciag znakow AB ktore reprezentuja wywolanie destruktora wychodzi mi zupelnie inny niz jak wrzucam kod do kompilatora. Wiem ze destruktory sa wywolywane od pochodnej, ale przy tak rekurencyjnym przykladzie nie potrafie sobie z tym poradzic. Ciag wywolan konstruktorow to A(3)->B(2)->A(1)->B(0)->A(0)->B(1)->A(0)->B(0)->A(2)->B(1)->A(0)->B(0)->A(1)->B(0)-A(0) gdzie argument to aktualna wartosc pola int n.