program Projekt_13;
{$APPTYPE CONSOLE}
uses
  SysUtils;

type
  TStudent = class
    public
      procedure JakiStudent; virtual; abstract;
    private
      FNazwisko: String;
  end;
//---------------------------------------------------------
  // Klasa TOcena dziedziczy po klasie TStudent
  TOcena = class(TStudent)
    public
      // deklaracja konstruktora
      constructor Create(Nazwisko: String);
      procedure JakiStudent; override; 
      procedure JakaOcena;
  end;
//---------------------------------------------------------
procedure TOcena.JakiStudent;
  begin
    if (FNazwisko = 'Janek Wackowski') then
      Writeln('Bardzo dobry student')
      else
        if (FNazwisko = 'Wacek Jankowski') then
          Writeln('Kiepski student')
          else
            Writeln('Brak takiego studenta');
  end;
//---------------------------------------------------------
procedure TOcena.JakaOcena;
  begin
    if (FNazwisko = 'Janek Wackowski') then
      Writeln(FNazwisko,': Egzamin Informatyka: 5')
      else
        if (FNazwisko = 'Wacek Jankowski') then
          Writeln(FNazwisko,': Egzamin Informatyka: 2.5')
          else
            Writeln('Brak oceny');
  end;
//---------------------------------------------------------
constructor TOcena.Create(Nazwisko: String);
  begin
    FNazwisko:= Nazwisko;
    // opcjonalnie cialo konstruktora klasy TOcena
    // z wartoscią domyslna pola FNazwisko klasy TStudent
    // przekazywaną jako argument konstruktora
  end;
//---------------------------------------------------------
var
  Student: TOcena;
begin
  // tworzenie dynamicznego egzemplarza (obiektu)
  // Student klasy TOcena
  Student:=TOcena.Create('Wacek Jankowski');
  Student.JakaOcena;
  Student.JakiStudent;
  ReadLN;
  // zwalnianie (niszczenie) obiektu Student
  // poprzez bezpośrednie wywołanie metody Free
  Student.Free;
end.


