mam dwa pytania, jedno odnosnie dziedziczenia a drugie wyjatkow ale postanowilem zalozyc jeden temat:
pierwsze:
czy w delphi dziedziczy sie konstruktory? czy konstruktor moze byc wirtualny?
pytania biora sie z tego iz w c++ tego nie ma:) a tu wydaje mi sie ze jest.
taki przyklad:
chce dynamicznie <ort>twozyc </ort>forme, IDE nie generuje ciala konstruktora wiec dodaje go sobie do klasy:
interface:
...
constructor Create(owner: TComponent);
implementation
...
constructor klasa.Create(owner: TComponent);
begin
inherited Create(owner);
...
end;
dostaje ostrzezenie i przyslaniam wirtualany konstruktor z klasy bazowej. dodanie override przy deklaracji likwiduje ostrzezenie.
jaki jest sens virtualnych konstruktorow?
drugie pytanie dotyczy wyjatkow:
zakladajac iz mamy w klasie akrybuty bedace obiektami innych klas badz wskazniki.
konstruktor wyglada tak:
...
begin
obiekt_klasy := Klasa.Create;
//tu instrukcje ktora generuje wyjatek
end;
finalnie obiekt nie zostaje <ort>utwozony </ort>a w miejsu <ort>twozenie </ort>obiektu mozemy przechwycic wyjatek, ale co z naszym "obiekt_klasy"?
w c++ robi sie tak:
{
obiekt_klasy = new Klasa();
try
{
//tu moze byc wyjatek
}
catch(const Exception& e)
{
// tu lapiemy
delete obiekt_klasy; // zwalniamy i wyjatek przekazujemy dalej
throw;
}
}
i spokojnie lapiemy <ort>sobei </ort>wyjatek w miejscu <ort>twozenia </ort>naszego <ort>obeiktu </ort>a "obiekt _klasy" jest zwolniony.
czy w delphi jest jakis mechanizm pozwalajacy zlapac wyjatek i przekazac go dalej?
finally odpada bo w przypadku nie wystapienia <ort>wyjateku </ort>"obiek_klasy" ma byc zniszczony w destruktorze.
w c++ mozemy <ort>stwozyc </ort>wlasna klase wyjatku ktora oprocz komuniaktu moze zawierac <ort>jakeis </ort>dane, liczby idt istotne dla odpowiedniego postepowania.
czy w delphi jest taka mozliwosc?
w bloku except z tego co wiem mozna jedynie wywolac raise i otrzymamy komunikat wyjatku ale do <ort>samgo </ort>obiektu wyjatku nie ma dostepu wiec takie <ort>twozenie </ort>inteligentniejszych wyjatkow mijaloby sie z celem choc mam nadzieje iz nie mam racji:).
try
...
except
on xxx do
//tu chce zwolnic pamiec i wyjatek puscic dalej z tym samym komunikatem. da sie? jesli nie to jak rozwiazac ten problem?