Skocz do zawartości

[Delphi] Dziedziczenie klas, klasy potomne


raV

Polecane posty

Hej. Mam taki kod:

[code=Delphi]
type
Tbbb = class // deklaracja klasy rodzica, podstawowej
procedure b();
end;

procedure Tbbb.b();
begin
ShowMessage(IntToStr( PROBLEM ));
end;


Taaa = class // deklaracja klasy, ma w sobie klasę Tbb
b : Tbbb;
c : integer;
end;

// ... kreujemy te obiekty...
[/code]


Wiemy, że klasa Tbbb będzie występowała w klasie Taaa. Tam gdzie napisałem PROBLEM, chciałbym, aby znalazła się zmienna c z class Taaa. Tak jakby class Taaa był "właścicielem" konkretnego Tbbb i jak wydobyć z niego zmienną c? Jak to zrobić?

Pozdrawiam.
Link do komentarza
Udostępnij na innych stronach

Nie bardzo rozumiem. [b]Jakto skąd wiedzieć przcież deklarujesz konkretnie nazwane obiekty to w czym problem ?

Musisz przesłać do tego IntToStr jakiś konkretny obiekt typu Taaa.

[quote] i jak wydobyć z niego zmienną c [/quote] Nie rozumiem z Tbbb nie "wyłuskasz" (tak się nazywa . ?) zmiennej c bo przecież jej nie ma chyba, że byś zrobił dziedziczenie z klasy Tbbb.

Ot taka mini-strona moja po godzinach :)http://www.wnetrzekuchni.pl

Link do komentarza
Udostępnij na innych stronach

[code=Delphi] type
Taaa = record // deklaracja rekordu
liczba : integer;
end;

Tbbb = class // deklaracja klasy
procedure PokazLiczbe(_a: Taaa);
end;

var
Form1: TForm1;
a: Taaa; // rekord
b: Tbbb; // klasa

interface

procedure Tbbb.PokazLiczbe(_a: Taaa); // procedura której parametrem jest rekord typu Taaa
begin
ShowMessage(IntToStr(_a.liczba ));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
a.liczba:= 11; // przypisywanie wartości

b:= Tbbb.Create; // tworzenie klasy
b.PokazLiczbe(a); // procedura klasy wyświetla liczbę z rekordu
FreeAndNil(b); // niszczenie klasy zwalnianie pamięci

end; [/code]

takie coś??
Link do komentarza
Udostępnij na innych stronach

jak coś jeszcze nie jasno opisałem problem to spróbuje inaczej

[code=Delphi]
TDziecko = class
procedure PokazNazwisko;
Imie : String;
end;

TRodzic = class
Dzieci = Array of TDziecko;
Nazwisko : String;
Imie : String;
end;

(...)

Maryśka := TRodzic.Create(...);
Maryśka.Dzieci[123] := TDziecko.Create(...);
Maryśka.Dzieci[123].PokazNazwisko;

[/code]

A no coś takiego. Dziecko wie, że jego nazwisko to nazwisko rodziców, przedstawia się właśnie nim. Chciałbym też, aby pole Nazwisko nie występowało w klasie TDziecko.
Link do komentarza
Udostępnij na innych stronach

wiesz, ja sobie dałem spokój z tym już na wstępie mojego programowania i teraz słabo się w tym orientuję smile.gif
i trochę żałuję:)
był czas, że trochę się orientowałem, kiedy pisałem własne komponenty - i chyba dla nich warto się jednakw tym orientować, ale do Twojego celu z rodzinką z miejsca bym pomyślał o tablicach

Link do komentarza
Udostępnij na innych stronach

Ja bym to zorbił tak w tej sytuacji biggrin.gif

[code=Delphi] TDziecko = class

Imie : String;
Rodzic:TRodzic;
XX]JTXXĘNBYH^v6śóŚVćCŚ67G'V7F\"DGŚV6ś7&VFR&GŚ3E&GŚ4)4(II4(4)4(4)Qiecko.PokazNazwisko;
begin
Rodzic.Nazwisko;
end;
[/code]

Pamiętaj że klasa jest tylko wskaźnikiem wiec przechowywanie wskaźnika kosztuje Cię bardzo mało i oszczędzasz sobie trudu biggrin.gif.

www.spider.dathox.com :)

Link do komentarza
Udostępnij na innych stronach

  • 5 years later...

Przepraszam ze odgrzeję ale w powyższych postach zapewne było cos co było mi potrzebne ale pozostały pajączki ;)

jakby się nie udało tego przywrócić albo było nie do końca wyjaśnieniem poniższego zagadnienia to prószę o sugestie,

ale fakt chodzi o taką błahostkę że aż głupio pytać, delphi 2007

 

 TRodzic= class
 private
 protected
TimerStart: TTimer;
 public
constructor Create();overload;
destructor Destroy; overload;
procedure Wyswietl(var S: String);
 end;

 TDziecko= class
 private
 protected
 public
constructor Create();overload;
destructor Destroy; overload;
procedure Wyswietl(var S: String); overload;
 end;





procedure TRodzic.Wyswietl(var S: String);
begin
 ShowMessage('wyswietlam 1 '+S);
end;

// ...

procedure TDziecko.Wyswietl(var S: String);
begin
 inherited;
 ShowMessage('wyswietlam 2 '+S);
end;

 

Oczywiście tworze zmienną dziecko: TDziecko i jej używam.

Z założenia miało zrobić tak aby najpierw zrobiło to co jest w TRodzic.Wyswietl a potem TDziecko.Wyswietl

ale przy słówku inherited; pokazuje błąd kompilacji i sie nie kompiluje

"[DCC Error] Unit1.pas(71): E2008 Incompatible types"

 

z góry dziekuję

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...