Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по экземплярам классов   Найти похожие ветки 

 
Антоныч   (2004-12-07 17:32) [0]

Помогите, возник такой вопрос.
Допустим, имеются 2 классa: Class1=class (TObject) и Class2=class (TObject) (различные).

Также имеется некоторая переменная MyObj – экземпляр класса в дальнейшем.
Для того, чтобы она стала экземпляром, необходимо произвести действия:
var MyObj: Class1;
...
MyObj:=Class1.Create;

Теперь MyObj – экземпляр класса Class1. Аналогично и для Class2.

Так вот, вопрос в следующем: можно ли сделать так, чтоб в процессе выполнения программы (например, на этапе создания формы), переменная MyObj становилась бы экземпляром класса либо Class1, либо Class2 (в зависимости от некоторого условия). Вообще, у меня вся загвоздка в том, какого типа её объявить в разделе var.

Заранее благодарен за содержательные ответы.


 
Александр Иванов ©   (2004-12-07 17:36) [1]

TObject, тогда ее можно использовать и так и так.


 
Антоныч   (2004-12-07 18:01) [2]

попробовал, тогда почему-то не видит полей, методов и свойств класса.

Class1=class(TObject)
 private
   FMarka: string;
   function GetMarka: string;
   procedure SetMarka(const Value: string);
 published
   constructor create;
   destructor destroy; override;
   property Marka: string read GetMarka write SetMarka;
 end;

var
 Form1: TForm1;
 MyObj: TObject;

implementation

constructor Class1.create;
begin
 inherited;
end;

destructor Class1.destroy;
begin
 destroy;
end;

function Class1.GetMarka: string;
begin
 Result:=FMarka;
end;

procedure Class1.SetMarka(const Value: string);
begin
 FMarka:=Value;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 MyObj:=Class1.create;
 MyObj.Marka:="121";
end;

Marka - Undeclared identifier   :(((


 
Рамиль ©   (2004-12-07 18:05) [3]


>procedure TForm1.FormCreate(Sender: TObject);
>begin
> MyObj:=Class1.create;
> MyObj.Marka:="121";
> end;


TClass1(MyObj).Marka:="121


 
Александр Иванов ©   (2004-12-07 18:12) [4]

(MyObj as Class1).Marka:="fdsfdfg";


 
MBo ©   (2004-12-07 18:14) [5]

Создай общего родителя, обладающего полями и методами, общими для обоих классов-наследников.
И обязательно почитай о ПОЛИМОРФИЗМЕ


 
Антоныч   (2004-12-07 18:30) [6]

2 Александр Иванов:
Так работает, но все-равно не пойдет. Мне при каждом обращении к методам класса надо явно указывать, экземпляр какого класса MyObj:
(MyObj as Class1).Marka:="fdsfdfg";
необходимо один раз однозначно соотнести, чтоб затем в программе просто обращаться: MyObj.Marka:="121";

2 MBo:
Создать общего родителя - можно, но мне переделывать всю прогу придется полностью, а она и так неслабая :)).
Про полиморфизм читал, знаю и использую, но как-то не пойму, где его здесь можно употребить. Может, не до конца уловил суть :).


 
MBo ©   (2004-12-07 18:46) [7]

type
 TMan=class
   function Name:string;virtual;abstract;
 end;

 TVasya=class(TMan)
   function Name:string;override;
 end;

 TPetya=class(TMan)
   function Name:string;override;
 end;

implementation

procedure TForm1.Button1Click(Sender: TObject);
var
 Man:TMan;
begin
 if Odd(GetTickCount) then
   Man:=TVasya.Create
 else
   Man:=TPetya.Create;

 Caption:=Man.Name;

 Man.Free;
end;

{ TPetya }

function TPetya.Name: string;
begin
 Result:="Petya";
end;

{ TVasya }

function TVasya.Name: string;
begin
 Result:="Vasya";
end;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.066 c
14-1101825425
Dada
2004-11-30 17:37
2004.12.19
Ой, я вас умолую, неговорит мне...


3-1100811562
_Lucky_
2004-11-18 23:59
2004.12.19
Что означает сей SQL код


1-1102413849
Aleksandr.
2004-12-07 13:04
2004.12.19
Как правильно сделать управление ProgressBarами в многопоточн.?


1-1101985367
PURGEN
2004-12-02 14:02
2004.12.19
Форма


1-1101965710
Анатолик
2004-12-02 08:35
2004.12.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский