Форум: "Основная";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];
ВнизКак избавиться от сообщений типа: Найти похожие ветки
← →
Prok12 (2002-09-08 16:46) [0][Warning]: Constructing instance of "TGraphicBase" containing abstract methods?
Суть проблемы такова.
Имею базовый (родительский) класс:
type TGraphicBase = class(TImage)
......................
protected { Protected declarations }
procedure AboutBox; virtual; abstract;
......................
end;
Строю на основе этого класса несколько дочерних классов, в которых и описываю реализацию procedure AboutBox: в них эта процедура описывется, как override.
В модуле, где используются эти дочерние классы, описываю некоторые из них так:
MyChild: TGraphicBase, (полиморфизм), и создаю оператором
MyChild := TGraphicBase.Create(Self)
При этом получаю при компиляции указанное сообщение (относящееся к строке Create), хотя в целом вся программа работает нормально...
Аналогичную проблему имею, когда мой базовый класс происходит от TForm, а создаю я его с помощью переопределения (override) метода TForm.CreateNew. Снова не удаётся без этих Warning вводить свои абстрактные методы.
← →
Anatoly Podgoretsky (2002-09-08 16:49) [1]Убирать не надо, а вот принять к действию стоит, ты создаешь базовый класс, в котором присутствуют абстрактные методы
← →
Криворукий (2002-09-08 16:52) [2]>MyChild: TGraphicBase, (полиморфизм), и создаю оператором
>MyChild := TGraphicBase.Create(Self)
Это не полиморфизм.
Полиморфизм предполагает
MyChild: TGraphicBase, (полиморфизм), и создаю оператором
MyChild := TGraphicClildClass.Create(Self)
Причём в TGraphicClildClass (= class(TGraphicBase)) абстрактные методы перекрыты.
А создавать экземпляр базового класса в общем случае бессмысленно.
← →
Prok12 (2002-09-09 10:27) [3]С замечанием насчёт полиморфизма согласен. Попробую сформулировать по-другому.
Аналогичную проблему имею, когда мой базовый класс происходит от TForm, а создаю я его с помощью переопределения (override) метода TForm.CreateNew. Здесь я уже не использовал полиморфизм, т.е. описывал и создавал дочерние классы так:
type TMyBaseClass = class(TForm) // Базовый (родительский) класс
.............
procedure DrawPicture(AddBottomText: String); virtual; abstract;
constructor CreateNew(AOwner: TComponent; Dummy: Integer = 0); override;
end;
{---------------------------------------------------------------}
type TMyChild = class(TMyBaseClass) // Дочерний класс
.............
procedure DrawPicture(AddBottomText: String); override;
end;
{---------------------------------------------------------------}
type MyChild: TMyChild
..................................
MyChild := TMyChild.CreateNew(nil, 0) // Создаём дочерний класс - и сразу тот-же Warning!
т.е, снова не удалось без этих Warning добавить свои абстрактные методы (хотя опять же - программа работает!).
← →
Ученик (2002-09-09 10:34) [4]Избавление от Warning
type
TMyBaseClassClass = class of TMyBaseClass;
var
MyBaseClass : TMyBaseClassClass;
begin
MyBaseClass := TMyChild;
MyChild := MyBaseClass.CreateNew(nil, 0);
...
← →
Юрий Федоров (2002-09-09 10:39) [5]{$WARNINGS OFF}
хотя в данном случае нужно именно бороться с причиной
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c