Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Виртуальные поля и inherited self'y  [new]
фываенг
Member

Откуда:
Сообщений: 52
Скажите пожалуйста, есть ли в делфи виртуальные поля, и возможность вызвать inherited self'y, то есть записать как то так inherited self.Create;

То есть:

BaseClass = class 
  a: array of string; virtual;
  constructor Create;
end;

ChildClass = class(BaseClass)
  a: array of string;
  constructor Create;
end;

ChildClass.Create;
begin
  a := ['lol', 'kek', 'apricot'];
  inherited self.Create; // с помощью этого вызова, 
end;

BaseClass.Create;
begin
  //  мы здесь используем a класса ChildClass 
end;
28 дек 18, 14:39    [21775783]     Ответить | Цитировать Сообщить модератору
 Re: Виртуальные поля и inherited self'y  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10926
фываенг
есть ли в делфи виртуальные поля,
Нет. А зачем такое нужно?
фываенг
то есть записать как то так inherited self.Create;
А чем не устроило
фываенг
inherited Create;
?
28 дек 18, 15:05    [21775827]     Ответить | Цитировать Сообщить модератору
 Re: Виртуальные поля и inherited self'y  [new]
фываенг
Member

Откуда:
Сообщений: 52
_Vasilisk_,

чтобы в конструкторе базового класса использовать поле производного класса
28 дек 18, 15:09    [21775832]     Ответить | Цитировать Сообщить модератору
 Re: Виртуальные поля и inherited self'y  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47534

фываенг
чтобы в конструкторе базового класса использовать поле производного класса

Используй виртуальные функции для доступа к этому полю.

Posted via ActualForum NNTP Server 1.5

28 дек 18, 15:16    [21775840]     Ответить | Цитировать Сообщить модератору
 Re: Виртуальные поля и inherited self'y  [new]
krapotkin
Member

Откуда: Екатеринбург
Сообщений: 674
наследование - это процесс, когда родитель НЕ ДОЛЖЕН знать о потомках
для изменения логики используется полиморфизм
и тогда _вызываемый_ виртуальный метод определяется классом _вызвавшего_ объекта
28 дек 18, 15:18    [21775843]     Ответить | Цитировать Сообщить модератору
 Re: Виртуальные поля и inherited self'y  [new]
Василий 2
Member

Откуда:
Сообщений: 554
Виртуальные сеттер и геттер, в базовом классе пустые, и проперти на их основе.
30 дек 18, 21:12    [21777020]     Ответить | Цитировать Сообщить модератору
 Re: Виртуальные поля и inherited self'y  [new]
alekcvp
Member

Откуда:
Сообщений: 1367
фываенг,

А в чём проблема-то?..

type

  BaseClass = class 
  protected
    a: array of string; 
  public
    constructor Create;
  end;

  ChildClass = class(BaseClass)
  public
    constructor Create;
  end;

constructor ChildClass.Create;
begin
  a := ['lol', 'kek', 'apricot']; // так не прокатит, но будем считать что это псевдокод
  inherited Create; // вызываем метод предка
end;

constructor BaseClass.Create;
begin
  // здесь у нас в a либо ничего, если BaseClass.Create вызвали напрямую, 
  // либо значения ['lol', 'kek', 'apricot'], если вызвали ChildClass.Create
end;
31 дек 18, 04:20    [21777075]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить