Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> наследование простого класса. Ошибка в конструкт. 
V
    Опции темы
FasterHarder
Дата 15.10.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 1.8.2007

Репутация: нет
Всего: нет



Всем программистам привет! Respect! В общем есть недопонимание работы с ООП(а точнее с наследованием). Вот часть моего кода:
Код

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TData =  array of array of integer;

TMatrix = class
public
    FData : TData;
    constructor Create(ARows, ACols : word); overload;
    procedure printTMatrix();
    procedure insertTMatrix(men : boolean);
    procedure seekMinNegative();
    end;
TMatr = class(TMatrix)
public
    constructor Create(ARows, ACols : word); overload;
    procedure seekMaxNoRep();
end;
//==================================================
    constructor TMAtrix.Create(ARows, Acols : word );
    var
        i : word;
    begin
      setlength(FData, Acols);
      for i := 0 to ACols - 1 do
        setlength(FData[i], ARows);
    end;
//==================================================
    constructor TMatr.Create(ARows, ACols : word);
    begin
        inherited Create(ARows, ACols);
    end;
//==================================================


проверяющая программа:
Код

var
Matrix : TMatrix;
MATR : TMatr;

col, row : integer;
s : string;
begin
  writeln('Col');
  readln(col);
  writeln('Row');
  readln(row);
  Matrix := Tmatrix.Create(row,col);
  writeln('Avtomatom ili net. Vvedite Y or N');
  readln(s);



  if( s = 'Y' ) then
  begin
     ...........
     ...........
  end;

  MATR.Create(row, col);


когда отладчик доходит до строки:
Код

MATR.Create(row, col);

отрабатывает родительский метод Create и на Setlength прога падает. Подскажите как быть то?
PM MAIL   Вверх
Rennigth
Дата 15.10.2007, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



А кто так объекты создает? 
Код

MATR.Create(row, col);

надо так
Код

MATR := TMATR.Create(row, col);


Это сообщение отредактировал(а) Rennigth - 15.10.2007, 14:35


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
FasterHarder
Дата 15.10.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 1.8.2007

Репутация: нет
Всего: нет



thank you so much for answer/help. Теперь все получилось. Respect.
PM MAIL   Вверх
VICTAR
Дата 15.10.2007, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 10
Всего: 80



Цитата(FasterHarder @  15.10.2007,  14:14 Найти цитируемый пост)
constructor Create(ARows, ACols : word); overload;


а случаем не override? =)
PM MAIL   Вверх
Bose
Дата 15.10.2007, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 8
Всего: 51



Цитата(VICTAR @  15.10.2007,  14:58 Найти цитируемый пост)
а случаем не override? =)

в TMatr да =)


PM MAIL WWW Skype   Вверх
VICTAR
Дата 15.10.2007, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 10
Всего: 80



Цитата(Bose @  15.10.2007,  16:19 Найти цитируемый пост)
в TMatr да =)

Про overload я говорил в принципе
А вообще можно было
Код

TMatrix = class
public
    ...
    constructor Create(ARows, ACols : word);
    ...
TMatr = class(TMatrix)
public
    constructor Create(ARows, ACols : word); //хотя это лишнее


Это сообщение отредактировал(а) VICTAR - 15.10.2007, 19:45
PM MAIL   Вверх
Bose
Дата 15.10.2007, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 8
Всего: 51



Код

TMatrix = class
public
    ...
    constructor Create(ARows, ACols : word);
    ...
TMatr = class(TMatrix)
public
    constructor Create(ARows, ACols : word); 


А override где? O_o

Код

TMatr = class(TMatrix)
public
    constructor Create(ARows, ACols : word); override; 


PM MAIL WWW Skype   Вверх
VICTAR
Дата 15.10.2007, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 10
Всего: 80



а зачем здесь override?
override в конструкторе нужен, только если только конструктор предка помечен как virtual.
PM MAIL   Вверх
Bose
Дата 16.10.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 8
Всего: 51



Цитата(VICTAR @  15.10.2007,  20:44 Найти цитируемый пост)
а зачем здесь override?override в конструкторе нужен, только если только конструктор предка помечен как virtual.

Ах, да.. точно... virtual
или как dynamic

В твоём примере, 
Код

TMatrix = class
public
    ...
    constructor Create(ARows, ACols : word);
    ...
TMatr = class(TMatrix)
public
    constructor Create(ARows, ACols : word); 

если не ошибаюсь в конструкторе TMatr.Create(ARows, ACols : word) не получится вызвать конструктор предка
inherited TMatrix.Create(ARows, ACols : word) 
без override



PM MAIL WWW Skype   Вверх
VICTAR
Дата 16.10.2007, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 10
Всего: 80



Цитата(Bose @  16.10.2007,  12:14 Найти цитируемый пост)
не получится вызвать конструктор предка

По идее все должно отработать нормально.
А вообще constructor в TMatr лишний.
PM MAIL   Вверх
Bose
Дата 16.10.2007, 20:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 8
Всего: 51



Цитата(VICTAR @  16.10.2007,  12:49 Найти цитируемый пост)
По идее все должно отработать нормально.

сомневаюсь

Цитата(VICTAR @  16.10.2007,  12:49 Найти цитируемый пост)
А вообще constructor в TMatr лишний.

согласен =) 
PM MAIL WWW Skype   Вверх
FasterHarder
Дата 16.10.2007, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 1.8.2007

Репутация: нет
Всего: нет



можно тему закончить, т к полный вариант можно увидеть в другом топеsmile

P.S. там и обсудитьsmile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1382 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.