Object Pascali ne kadar biliyorsunuz ?
Posted by: sadettinpolat in Uncategorized, kod ornekleri, oop, programlama, tags: cok bicimlilik, object pascal, sanal metodlarSoruların doğru cevaplarını öğrenmek için onları delphiye taşıyıp çalıştırmanız yeterli lakin bunu yapmadan önce kodları inceleyerek sonucu kendiniz bulmaya çalışın. Bunun size faydası biraz oop, biraz sanal metodlar biraz statik metodlar ve çok biçimlilik olacak…
Soru-1 Asagidaki programi calistirdigimizda consoldaki cikti ne olur ?
program Project4;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TAnaClass = class
procedure Ad;
end;
TCocukClass = class(TAnaClass)
procedure Ad;
end;
{ TAnaClass }
procedure TAnaClass.Ad;
begin
writeln('Ana Class');
end;
{ TCocukClass }
procedure TCocukClass.Ad;
begin
inherited Ad;
writeln('Çocuk Class');
end;
var
Cocuk :TAnaClass;
begin
try
cocuk :=TCocukClass.Create;
cocuk.Ad;
freeandnil(cocuk);
readln;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
a) Ana Class
b) Çocuk Class
c) Ana Class
Çocuk Class
Soru-2 Asagidaki programi calistirdigimizda consoldaki cikti ne olur ?
program Project4;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TAnaClass = class
procedure Ad;virtual;//bu metod virtual olarak tanimlaniyor....
end;
TCocukClass = class(TAnaClass)
procedure Ad;
end;
{ TAnaClass }
procedure TAnaClass.Ad;
begin
writeln('Ana Class');
end;
{ TCocukClass }
procedure TCocukClass.Ad;
begin
inherited Ad;
writeln('Çocuk Class');
end;
var
Cocuk :TAnaClass;
begin
try
cocuk :=TCocukClass.Create;
cocuk.Ad;
freeandnil(cocuk);
readln;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
a) Ana Class
b) Çocuk Class
c) Ana Class
Çocuk Class
Soru-3 Asagidaki programi calistirdigimizda consoldaki cikti ne olur ?
program Project4;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TAnaClass = class
procedure Ad;virtual;
end;
TCocukClass = class(TAnaClass)
procedure Ad;
end;
{ TAnaClass }
procedure TAnaClass.Ad;
begin
writeln('Ana Class');
end;
{ TCocukClass }
procedure TCocukClass.Ad;
begin
// inherited Ad; TAnaclass in ad metodunu cagiran komut
writeln('Çocuk Class');
end;
var
Cocuk :TAnaClass;
begin
try
cocuk :=TCocukClass.Create;
cocuk.Ad;
freeandnil(cocuk);
readln;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
a) Ana Class
b) Çocuk Class
c) Ana Class
Çocuk Class
Soru-4 Asagidaki programi calistirdigimizda consoldaki cikti ne olur ?
program Project4;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TAnaClass = class
procedure Ad;virtual;
end;
TCocukClass = class(TAnaClass)
procedure Ad;override;
end;
{ TAnaClass }
procedure TAnaClass.Ad;
begin
writeln('Ana Class');
end;
{ TCocukClass }
procedure TCocukClass.Ad;
begin
inherited Ad;
writeln('Çocuk Class');
end;
var
Cocuk :TAnaClass;
begin
try
cocuk :=TCocukClass.Create;
cocuk.Ad;
freeandnil(cocuk);
readln;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
a) Ana Class
b) Çocuk Class
c) Ana Class
Çocuk Class
Cevaplar:
Cevap 1) a şıkkı Ana Class. Cocuk nesnesini TCocukClass sinifini kullanarak Create ediyoruz ama tipi TAnaClass olduğu için ve Ad proseduru de statik bir metod olduğu için nesnenin sınıf türüne ait olan ad proseduru çalıştırılır….
Cevap 2) yine a şıkkı Ana Class. Cocuk nesnesini TCocukClass sinifini kullanarak Create ediyoruz ama tipi TAnaClass olduğu için ve Ad proseduru de sanal bir metod olmasina ragmen TCocukClass sinifinin onu override anahtar kelimesiyle acikca ezmedigi icin yine nesnenin sınıf türüne ait olan ad proseduru çalıştırılır….
Cevap 3) yine a şıkkı Ana Class. Cocuk nesnesine ait Ad metodu calismadigindan burda yaptigimiz degisikliklerin hicbir onemi yoktur.
Cevap 4) c şıkkı Ana Class , Cocuk Class. Cocuk nesnesine ait Ad metodu acik bir sekilde Ana classin ad metodunu ezdiginden ve kalitim yontemiyle ana classin ad metodunu cagirmasindan dolayi consolda hem Ana class hem de Cocuk class satirlarini goruruz.

Entries (RSS)