Problem z desktruktorem

0

Mam poniższy kod programu. O ile się wszystko kompiluje i nawet mogę podać wymiary boków to jednak gdy poda pole i obwód program staje i nie chce się wyłączyć. Na moje oko wygląda jak źle działający destruktor ale nie wiem jak mam to poprawić

#include <iostream>

//deklaracja klasy podstawoej

class Figura
{
public:
	Figura(int boki);
	void obwod(double ob);
	void pole (double pole);
	~Figura();
protected:
	double *boki;
};

Figura::Figura(int boki)
{
	this->boki= new double[boki-1];
}

Figura::~Figura()
{
	delete[] this->boki;
	boki=NULL;
}

void Figura::obwod(double ob)
{
	std::cout<<"Obówd wynosi: "<<ob<<" .\n";
}

void Figura::pole(double pole)
{
	std::cout<<"Pole wynosi: "<<pole<<" .\n";
}

class Prostokad:public Figura
{
public:
	Prostokad(int bok);
	void pole();
	void obwod();
	~Prostokad();
};
Prostokad::Prostokad(int bok):Figura(bok)
{
	std::cout<<"Podaj wymiary bokow:";
	std::cin>>boki[0];
	std::cin>>boki[1];
}
Prostokad::~Prostokad()
{
	Figura::~Figura();
}

void Prostokad::pole()
{
	Figura::pole(boki[0]*boki[1]);
}

void Prostokad::obwod()
{
	Figura::obwod(2*(boki[0]+boki[1]));
}


int _tmain(int argc, _TCHAR* argv[])
{
	Prostokad p(2);

	p.obwod();
	p.pole();
	return 0;
}
0

Wywal wywołanie destruktora klasy bazowej z destruktora Prostokad, ponieważ w Twoim przypadku on i tak zostanie wywołany zaraz po destruktorze Prostokad. Z resztą dodaj sobie do konstruktorów i destruktorów cout << "costam"; i będziesz wiedział kiedy co się wywołuje.

0

I zapamiętaj sobie, że destruktora się niemal nigdy ręcznie nie wywołuje.
Jak już dojdziesz do momentu, w którym będziesz musiał go rzeczywiście samemu wołać, to powinieneś być już na tyle obcykany, że będziesz wiedział dlaczego. ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1