Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2011, 17:49   #11
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Код:
  Object:=TExpression.Create;
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 17.03.2011, 17:53   #12
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Объявляешь переменную с типом своего класса. Пишешь в коде переменная := класс.create;
Son Of Pain вне форума Ответить с цитированием
Старый 18.03.2011, 00:22   #13
Електроник
Пользователь
 
Регистрация: 27.03.2010
Сообщений: 21
По умолчанию

Спасибо всем за помощь!

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

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

type
TMyClass = class (TObject)
private

public
function Expr_(str_in:String):String;
end;



var
Form1: TForm1;
Ex: TMyClass;
str:String;



implementation

{$R *.dfm}

function TMyClass.Expr_(str_in:String):strin g;
begin
Result:=str_in;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
str:=Ex.Expr_(Edit1.Text);
Edit2.Text:=str;
end;

end.

Долго експерементировал, в разних примерах по разному писали и вот что вышло....может что-то не так но работает..
Елси плохой код напишите если не сложно где переработать можна на лучше....=)

Последний раз редактировалось Електроник; 18.03.2011 в 00:25.
Електроник вне форума Ответить с цитированием
Старый 18.03.2011, 05:25   #14
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Код:
str:=Ex.Expr_(Edit1.Text);
перед обращением к полям/методам класса его принято создавать.

Код:
Ex: TMyClass;
это не создание класса, а только его объявление. На С++ так можно, в Дельфи нужно явно создавать:

Код:
Ex := TMyClass.Create();
только перед созданием неплохо бы проверить, что класс ещё не создан:

Код:
if (nil = Ex) then Ex := TMyClass.Create();
Цитата:
может что-то не так но работает..
работает по чистой случайности, т.к. метод вашего класса ничего толком не делает, и, фактически, является процедурой, связанной с классом только именем.

Ну и не забываем класс удалять, так тоже принято в хороших программах:

Код:
Ex.Free(); Ex := nil;
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 18.03.2011, 13:30   #15
Електроник
Пользователь
 
Регистрация: 27.03.2010
Сообщений: 21
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
Код:
str:=Ex.Expr_(Edit1.Text);
перед обращением к полям/методам класса его принято создавать.

Код:
Ex: TMyClass;
это не создание класса, а только его объявление. На С++ так можно, в Дельфи нужно явно создавать:

Код:
Ex := TMyClass.Create();
только перед созданием неплохо бы проверить, что класс ещё не создан:

Код:
if (nil = Ex) then Ex := TMyClass.Create();


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

Ну и не забываем класс удалять, так тоже принято в хороших программах:

Код:
Ex.Free(); Ex := nil;
Спасибо за обьяснение, а в какой части програми нужно написать Create?? перед Implementation или после....
и если я все зделаю по твоей подсказке код будет верним полностью и можно будет функцию зделать сложнее??

Я добавил
Код:
if (nil = Ex) then Ex := TMyClass.Create();
в процедуру онклик кнопки, но не знаю правильно ли я зделал..
а еще
Код:
Ex.Free(); Ex := nil;
[/QUOTE] подумал добавить при завершении програми, но тоже не знаю так ли делаю..

Последний раз редактировалось Електроник; 18.03.2011 в 13:37.
Електроник вне форума Ответить с цитированием
Старый 18.03.2011, 14:52   #16
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Ex:=TMyClass.Create;
str:=Ex.Expr_(Edit1.Text);
Edit2.Text:=str;
Ex.free;
end;
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 18.03.2011, 15:03   #17
Електроник
Пользователь
 
Регистрация: 27.03.2010
Сообщений: 21
Радость

Цитата:
Сообщение от New man Посмотреть сообщение
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Ex:=TMyClass.Create;
str:=Ex.Expr_(Edit1.Text);
Edit2.Text:=str;
Ex.free;
end;
да я так и сделал...это уже будет правильно???

спасибо!
Електроник вне форума Ответить с цитированием
Старый 18.03.2011, 16:46   #18
Kotlyar562
Пользователь
 
Аватар для Kotlyar562
 
Регистрация: 03.02.2010
Сообщений: 46
По умолчанию

Могу привести пример класа, чтобы упорядочить Ваши знания. Например, написать класс TCircle (круг), который характеризуется координатами центра, радиусом и двумя методами - нахождения длины окружности и площади круга (консольное приложение).

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

Type
  TCircle= class(TObject)
    Fx, Fy : real; //координаты центра
    Fr: real;      //радиус
    constructor create;
    function S: real;
    function C: real;
  end;


constructor TCircle.create;   //описываем конструктор создания класса
begin
  inherited Create;        //вызываем конструктор родительского класса (TObject)
                           //чтобы выделить память под объект и т.д
                           
  Write('x= '); readln(Fx);   //пользователь вводит координаты и радиус
  Write('y= '); readln(Fy);
  Write('r= '); readln(Fr);
end;

function TCircle.S:real;   //описываем функцию нахождения площади круга
begin
  result:=pi*Fr*Fr;
end;

function TCircle.C:real;  //и функцию расчета длины окружности
begin
  result:=2*pi*Fr;
end;


var Circ: TCircle;

        //тело программы
begin
  Circ:= TCircle.create;  //создаем объект нашего класса
  Writeln('S= ',Circ.S:0:3);   //вызываем необходимые методы
  Writeln('C= ', Circ.C:0:3);
  Circ.Free;     //уничтожаем объект
  readln;
end.
Kotlyar562 вне форума Ответить с цитированием
Старый 18.03.2011, 18:06   #19
Електроник
Пользователь
 
Регистрация: 27.03.2010
Сообщений: 21
По умолчанию

Ваш пример работает как нужно, а у меня ошыбки и что делать не знаю...
Електроник вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описать класс-родитель и класс-потомок. Delphi 7 Andrew_M Помощь студентам 0 15.01.2011 14:42
свой собственный класс MediaPlayer'a nick17 Помощь студентам 2 26.11.2010 13:54
Delphi - Создать класс для вычисления суммы... Danara Помощь студентам 2 26.10.2010 13:03
Как создать свой формат? Rahim1993 Общие вопросы Delphi 2 04.03.2008 17:04