Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-61110
grigorys
2002-09-10 10:38
2002.09.19
Как вызвать End Process из Delphi и прервать действие программы


14-61290
ZzzzzzzzzzMan
2002-08-22 18:23
2002.09.19
...


6-61230
Alibaba
2002-07-16 13:58
2002.09.19
Как подождать результата соединения клиента с сервером?


1-61100
Aristarh
2002-09-06 14:13
2002.09.19
Определить путь к Common Files


3-61026
Nameless
2002-08-29 21:43
2002.09.19
Проблема навигации по базе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский