powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Непонятка с классами
7 сообщений из 7, страница 1 из 1
Непонятка с классами
    #39576958
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую всех!

Есть простейший проект -
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
unit main;

interface

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

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

var
  fmMain: TfmMain;
  Vetis: TVetis;

implementation

{$R *.dfm}

uses udm;

procedure TfmMain.Button1Click(Sender: TObject);
begin
   Vetis:=TVetis.Create;
   Vetis.GeoSpr.Create;
end;

end.



В нем модуль -
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
unit vetis;

interface

uses
  Classes, forms, windows,dialogs;


type
  TGeoSpr = class;

  TVetis = class(TObject)
  private
  public
     GeoSpr: TGeoSpr;
     constructor Create;
     destructor Destroy; override;
  end;

  TGeoSpr = class(TVetis)
  private
  public
     constructor Create;
     destructor Destroy; override;
  end;

implementation

constructor TVetis.Create;
begin
   inherited Create;
end;

destructor TVetis.Destroy;
begin
   inherited Destroy;
end;

constructor TGeoSpr.Create;
begin

end;

destructor TGeoSpr.Destroy;
begin
  inherited Destroy;
end;

end.



При вызове Vetis.GeoSpr.Create ошибка -
Код: plaintext
1.
2.
---------------------------
Project geo.exe raised exception class $C0000005 with message 'access violation at 0x00407fe7: read of address 0x00000000'.

Что нужно написать в constructor TGeoSpr.Create? Или сама конструкция в принципе неверна?
...
Рейтинг: 0 / 0
Непонятка с классами
    #39576986
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exteris,

Vetis.GeoSpr:=TGeoSpr.Create; ?
...
Рейтинг: 0 / 0
Непонятка с классами
    #39577003
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GerasimenkoVetis.GeoSpr:=TGeoSpr.Create; ?Причем в конструкторе TVetis
...
Рейтинг: 0 / 0
Непонятка с классами
    #39577204
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_GerasimenkoVetis.GeoSpr:=TGeoSpr.Create; ?Причем в конструкторе TVetis
Это да. А если я не хочу сразу создавать этот объект? Их теоретически будет много побольше.
...
Рейтинг: 0 / 0
Непонятка с классами
    #39577212
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exteris_Vasilisk_пропущено...
Причем в конструкторе TVetis
Это да. А если я не хочу сразу создавать этот объект? Их теоретически будет много побольше.

Тогда сделай функцию, которая будет возвращать этото объект, и при первом обращении будет создавать его

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  TVetis = class(TObject)
  private
    FGeoSpr: TGeoSpr;
  public
     function GeoSpr: TGeoSpr;


function TVetis.GeoSpr: TGeoSpr;
begin
  if FGeoSpr = nil then 
    FGeoSpr := TGeoSpr.Create;
  Result := FGeoSpr;
end;
...
Рейтинг: 0 / 0
Непонятка с классами
    #39577214
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747Exterisпропущено...

Это да. А если я не хочу сразу создавать этот объект? Их теоретически будет много побольше.

Тогда сделай функцию, которая будет возвращать этото объект, и при первом обращении будет создавать его

[/src]
Это уже вариант, спасибо.
...
Рейтинг: 0 / 0
Непонятка с классами
    #39577221
Tactical Nuclear Penguin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exteris_Vasilisk_пропущено...
Причем в конструкторе TVetis
Это да. А если я не хочу сразу создавать этот объект? Их теоретически будет много побольше.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  TVetis = class(TObject)
  private
    FGeoSpr: TGeoSpr;
    function GetGeoSpr: TGeoSpr;
  public
    property GeoSpr: TGeoSpr read GetGeoSpr;
    constructor Create;
    destructor Destroy; override;
  end;

function TVetis.GetGeoSpr: TGeoSpr;
begin
  if FGeoSpr = nil then
    FGeoSpr := TGeoSpr.Create;
  result := FGeoSpr;
end;
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Непонятка с классами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]