Урок 26 Задача 1

Урок 26 Задача 1:

Есть код:

type
  Cat = class  // родительский класс
  public
    constructor create(nameValue: string);
    procedure sayHello();
    function getName(): string;
 
  strict protected
    name: string;
  end;
 
  Tiger = class(Cat)
  public
    function getRoarStart(): string; // вернет строку для начала рыка рыка
    procedure roar(); // само рычание
  end;
 
constructor Cat.create(nameValue: string);
begin
 self.name := nameValue;
end;
 
procedure Cat.sayHello();
begin
 writeln('Привет, я '  + self.getName() + '!');
end;
 
function Cat.getName(): string;
begin
 result := self.name;
end;
 
function Tiger.getRoarStart(): string;
begin
 result := self.getName() + ':';
end;
 
procedure Tiger.roar();
begin
 writeln(self.getRoarStart() + ' rrrrrrrrrr!');
end;
 
var
  CatItem: Cat;
  TigerItem: Tiger;
begin
  CatItem := Cat.create('Мурка');
  CatItem.sayHello();
 
  TigerItem := Tiger.create('Шархан');
  TigerItem.sayHello();
  TigerItem.roar(); // рычит
end.  

-- для двух элементов классов здесь применена избыточная область видимости, измените модификаторы доступа для этих элементов так, чтобы видимость их была минимальной достаточной для работы программы.

РЕШЕНИЕ:

type
  Cat = class  // родительский класс
  public
    constructor create(nameValue: string);
    procedure sayHello();

  strict protected
    name: string;
  {элемент доступен из метода класса и метода потомка класса}
    function getName(): string;
  end;

  Tiger = class(Cat)
  strict private
  {элемент доступен из собственного метода}
    function getRoarStart(): string; // вернет строку для начала рыка рыка

  public
    procedure roar(); // само рычание
  end;

constructor Cat.create(nameValue: string);
begin
 self.name := nameValue;
end;

procedure Cat.sayHello();
begin
 writeln('Privet, ya '  + self.getName() + '!');
end;

function Cat.getName(): string;
begin
 result := self.name;
end;

function Tiger.getRoarStart(): string;
begin
 result := self.getName() + ':';
end;

procedure Tiger.roar();
begin
 writeln(self.getRoarStart() + ' rrrrrrrrrr!');
end;

var
  CatItem: Cat;
  TigerItem: Tiger;
begin
  CatItem := Cat.create('Murka');
  CatItem.sayHello();

  TigerItem := Tiger.create('Sharhan');
  TigerItem.sayHello();
  TigerItem.roar(); // рычит
  readln();
end.
vedro-compota's picture

засчитано, супер

_____________
матфак вгу и остальная классика =)