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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2011, 23:12   #1
Form_13
Форумчанин
 
Регистрация: 25.04.2011
Сообщений: 107
По умолчанию Классы, наследие,вывод

Есть массив класса TPerson, у нас есть два варианта: студенты и преподаватели, это два наследуемых массива: TStud и TProf. Их вводим с клавиатуры в два поля, вводим в массив типа TPerson. Вывести нужно его же в поле listbox. Но у меня не получается даже в массив ввести, пишут адресную ошибку в функции ввода(Кнопка Добавить). Посмотрите.

Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

const
 SZL=12;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    GroupBox1: TGroupBox;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    Button1: TButton;
    Button2: TButton;
    ListBox1: TListBox;
    Button3: TButton;
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TName=string[15];
  TAddress=string[35];

TPerson=class
 private
  FName:Tname;     //значение свойства Name
 // FAddress:TAddress; // значение св-ва Address
  constructor Create(name:Tname);
  Function GetName:TName;
//  Function GetAddress:TAddress;
//  Procedure SetAddress(NewAddress:TAddress);
  function info: string; virtual;
 public
  Property Name:Tname
  read GetName;
  //Property Address: Taddress
  //read GetAddress
  //write SetAddress;
end;


TStud=class(TPerson)
 fgr:integer; { номер группы }
 constructor Create(name:Tname;gr:integer);
 function info: string; override;
end;

TProf=class(TPerson)
 fdep:string; { название кафедры }
 constructor Create(name:Tname;dep:Tname);
 function info: string; override;
end;

var
  Form1: TForm1;
  list:array[1..SZL] of TPerson;
  i:integer;

implementation

{$R *.dfm}

Constructor TPerson.Create(name:Tname);
 begin
  fname:=name;
 end;
Constructor TStud.Create(name:Tname; gr:Integer);
 begin
  inherited Create(Name);
  fgr:=gr;
 end;
Constructor TProf.Create(name:Tname; dep:Tname);
 begin
  inherited Create(Name);
  fdep:=dep;
 end;
Function TPerson.GetName;
 begin
  Result:=FName;
 end;
//Function TPerson.GetAddress;
 //begin
 // Result:=FAddress;
 //end;
//Procedure TPerson.SetAddress(NewAddress:TAddress);
 //begin
 // if FAddress =''
   //then FAddress:=NewAddress;
 //end;
function TPerson.info:string;
 begin
  result:='';
 end;
function TStud.info:string;
 begin
  result:=fname+' гp.'+IntTostr(fgr);
 end;
function TProf.info:string;
 begin
  result:=fname+'каф.'+fdep;
 end;
procedure TForm1.Button1Click(Sender: TObject);
 var Dralya1:TStud;
     Dralya2:TProf;
     s1:TName;
     s2:integer;
begin
 if (RadioButton1.Checked = TRUE) then
                                begin
                                 s1:=edit1.Text;
                                 s2:=StrToInt(edit2.Text);
                                 Dralya1.Create(s1,s2);
                                 list[1]:=dralya1;
                                end;

end;

procedure TForm1.Button3Click(Sender: TObject);
 begin
  close;
 end;

end.
Form_13 вне форума Ответить с цитированием
Старый 13.12.2011, 07:10   #2
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

А в контрукторе класса TPerson вызывать
Код:
inherited Create;
не нужно?
Делфи это вам не какой-то скриптовый язык, где конструктор вызывается у переменной:
Код:
Dralya1.Create(s1,s2);
Надо так:
Код:
Dralya1:= TStud.Create(s1,s2);
и соответственно заменить везде в коде.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
__set __get И наследие классов. Jakethefish PHP 2 30.06.2011 14:08
Наследие С++ Денис999 Помощь студентам 1 21.04.2011 11:46
Наследие С++ Денис999 Помощь студентам 2 17.04.2011 22:02
Наследие Классов. Solrainer7 Общие вопросы Delphi 4 12.07.2010 22:18