Kelas, instans kelas, konstruktor, destruktor
Dalam contoh di atas terdapat TAnimal dan subkelasnya TDog. Kelas hanyalah sebuah tipe data, dapat dipahami sebagai cetakan. Kelas itu sendiri tidak menyimpan data sama sekali, memori tidak akan dialokasikan untuk field MyInt: Integer pada contoh.
Meskipun variabel kelas memungkinkan kelas itu sendiri menampung data, hal ini tidak akan dibahas sekarang, kita hanya akan membahas kelas biasa dengan field umum.
Untuk mengalokasikan memori pada field, kamu harus membuat instans kelas; pembuatan instans memerlukan pemanggilan konstruktor.
Jika kamu tidak pernah membuat instans dari suatu kelas, kode kelas tersebut seolah tidak ada sama sekali, tidak akan dijalankan dan tidak ada memori yang dialokasikan untuk variabelnya. Kelas ibarat cetakan: memori hanya dialokasikan saat digunakan, jika tidak dipakai ia hanya diam tanpa menghabiskan sumber daya.
Konstruktor
- Metode khusus yang dideklarasikan dengan kata kunci
constructor; - Sistem akan mengalokasikan memori objek terlebih dahulu sebelum menjalankan kode konstruktor;
- Semua kelas mewarisi
TObjectsecara implisit, dilengkapi konstruktor tanpa parameterCreateyang dapat dipakai tanpa penulisan manual; - Konstruktor buatan sendiri adalah cara terbaik untuk inisialisasi objek, bisa memberikan nilai awal pada field di dalam konstruktor;
- Konstruktor buatan sendiri secara umum diberi nama
Create.
Contoh kode
program Demo;
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
{$codepage utf8}
uses SysUtils;
type
TAnimal = class
private
InternalStuff: TObject;
public
constructor Create;
destructor Destroy; override;
end;
constructor TAnimal.Create;
begin
inherited Create; // Panggil konstruktor induk di awal
InternalStuff := TObject.Create;
Writeln('Jalankan konstruktor TAnimal.Create');
end;
destructor TAnimal.Destroy;
begin
Writeln('Jalankan destruktor TAnimal.Destroy');
FreeAndNil(InternalStuff); // Bebaskan objek anak internal
inherited Destroy; // Panggil destruktor induk di akhir
end;
var
C: TAnimal;
begin
C := TAnimal.Create;
try
// Gunakan objek
finally
FreeAndNil(C); // Panggil destruktor Destroy secara otomatis
end;
end.
Hasil eksekusi
D:\fpcdemo>fpc mydemo.dpr
Free Pascal Compiler version 3.2.2 [2021/05/15] for i386
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling mydemo.dpr
Linking mydemo.exe
38 lines compiled, 0.1 sec, 68672 bytes code, 4260 bytes data
D:\fpcdemo>mydemo
Jalankan konstruktor TMyClass.Create
Jalankan destruktor TMyClass.DestroyCode language: CSS (css)
InternalStuff adalah objek anak yang disimpan di dalam kelas. Dibuat saat konstruktor berjalan, dan harus dibebaskan menggunakan FreeAndNil di dalam destruktor guna mencegah kebocoran memori.
