Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
37 / 37 / 6
Регистрация: 17.04.2011
Сообщений: 449

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

22.04.2011, 13:12. Показов 2447. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот код:
Delphi
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
 mytype = class
  public
    a:integer;
    c:integer;
    d:string;
    procedure akm;
    function nal(j,l:real):real;
    constructor create; overload;
    constructor create1(o,p:integer);
   private
      g:real;
   published
   constructor create(o,p:integer; h:string); overload;
   end;
 
mytype2 = class(mytype)
   published
   constructor create(l,p:integer);
   end;
 
constructor mytype.create1(o,p:integer);
  begin
  a:=o;
  c:=p;
  end;
 
constructor mytype2.create(l: Integer; p: Integer);
  begin
  a:=l;
  c:=p;
  end;
 
procedure TForm18.Button1Click(Sender: Tobject);
var
u:real;
begin
ob2:= mytype2.Create1(21,17);
showmessage(inttostr(ob2.c)+inttostr(ob2.a));
freeandnil(ob2);
end;
Как видите, даже при объявлении своего конструктора create в классе mytype2, можно использовать конструктор create1 предкового класса mytype. Или это в старых версия делфи не наследуется? У меня щас депфи 2009.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.04.2011, 13:12
Ответы с готовыми решениями:

Почему говорят, что Linq To Sql умер?
Я тут на форуме это вычитал, не помню тему, но там такое говорили. Откуда такая инфа? Что ещё из .NET умирает? Я задаю вопрос к тому, что...

Почему все говорят, что программируют на Delphi, а не на Pascal?
Почему все говорят, что программируют на Delphi, а не на Pascal? Или, аналогично, почему говорят, что программируют на Lazarus, а не на...

Не наследуется шаблонный конструктор
Добрый день. Есть такой код:class BaseClass { public: template<typename T> BaseClass(int id) : _id(id) {} private: ...

14
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
22.04.2011, 13:26
почему не наследуется? кто говорит?
можно сделать свой класс наследником например Tbutton, не объявлять в нем конструктор, а вызвать родительский.

Может в других языках и не наследуется
0
37 / 37 / 6
Регистрация: 17.04.2011
Сообщений: 449
22.04.2011, 13:32  [ТС]
Да просто читал в некоторых источниках, например здесь
http://ru.wikipedia.org/wiki/%... 0%F1%F1%E0
Ну щас я так понял, что конструктор не наследуется, если в дочернем классе объявить конструктор с таким же именем. Тогда, даже если в отцовском классе имеется несколько переопределённых конструкторов с таким именем, они всё равно не будут работать - я прав?
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
22.04.2011, 13:38
Цитата Сообщение от Akmas Посмотреть сообщение
они всё равно не будут работать
почему не будут?
ты пример приведи
0
37 / 37 / 6
Регистрация: 17.04.2011
Сообщений: 449
22.04.2011, 13:48  [ТС]
Цитата Сообщение от anonimus Посмотреть сообщение
почему не будут?
ты пример приведи
Delphi
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
 mytype = class
  public
    a:integer;
    c:integer;
    d:string;
    procedure akm;
    function nal(j,l:real):real;
    constructor create; overload;
    constructor create1(o,p:integer);
   private
      g:real;
   published
   constructor create(o,p:integer; h:string); overload;
   end;
 
   mytype2 = class(mytype)
   published
   constructor create(l,p:integer);
   end;
 
var
  Form18: TForm18;
   ob: mytype;
   i:integer;
   ob2: mytype2;
 
constructor mytype.create(o,p:integer; h:string);
     begin
  a:=o;
  c:=p;
  d:=h;
  end;
 
 constructor mytype2.create(l: Integer; p: Integer);
  begin
  a:=l+1;
  c:=p-l*2;
  end;
 
procedure TForm18.Button1Click(Sender: Tobject);
var
u:real;
begin
ob2:= mytype2.Create(21,17,’Текст’);
showmessage(ob2.d+inttostr(ob2.c)+inttostr(ob2.a));
freeandnil(ob2);
end;
Компилятор выдаёт ошибку, пишет, что в конструкторе mytype2.Create(21,17,’Текст’); слишком много параметров. То есть не воспринимает перегруженный конструктор отцовского класса. А если конструктор с именем create в наследуемом классе mytype2 не создавать, то будет работать.
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
22.04.2011, 13:56
Цитата Сообщение от Akmas Посмотреть сообщение
слишком много параметров.
и правильно пишет
у тебя конструктор в классе mytype2
Delphi
1
constructor create(l,p:integer);
2 параметра, а вызываешь ты его с тремя параметрами
Delphi
1
mytype2.Create(21,17,'Текст');
0
37 / 37 / 6
Регистрация: 17.04.2011
Сообщений: 449
22.04.2011, 14:01  [ТС]
Цитата Сообщение от anonimus Посмотреть сообщение
и правильно пишет
у тебя конструктор в классе mytype2
Delphi
1
constructor create(l,p:integer);
2 параметра, а вызываешь ты его с тремя параметрами
Delphi
1
mytype2.Create(21,17,'Текст');
Так он же в классе mytype перегруженный, и если бы я не объявлял конструктор с таким именем в mytype2 -унаследовались все перегруженные конструкторы с таким именем.
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
22.04.2011, 14:03
в классе mytype конструктор должен быть виртуальным, а в mytype2 с дерективой Override
тогда это будет полиморфизм. Если ты хочешь что бы в классе mytype2 наследовался, конструктор из класса mytype то зачем ты создаешь конструктор в mytype2 ?
0
37 / 37 / 6
Регистрация: 17.04.2011
Сообщений: 449
22.04.2011, 14:07  [ТС]
Цитата Сообщение от anonimus Посмотреть сообщение
в классе mytype конструктор должен быть виртуальным, а в mytype2 с дерективой Override
тогда это будет полиморфизм. Если ты хочешь что бы в классе mytype2 наследовался, конструктор из класса mytype то зачем ты создаешь конструктор в mytype2 ?
Ну это уже переопределение, а не наследование. Ну вот именно, полиморфизм. Просто, чтоб показать, что перегруженные конструкторы с имеющимся именем не наследуются.
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
22.04.2011, 14:10
убери из mytype2 конструктор.
на скрине видно что все прекрасно наследуется
Миниатюры
Почему говорят, что конструктор не наследуется - я сейчас убедился в обратном)  
0
37 / 37 / 6
Регистрация: 17.04.2011
Сообщений: 449
22.04.2011, 14:12  [ТС]
Цитата Сообщение от anonimus Посмотреть сообщение
убери из mytype2 конструктор.
на скрине видно что все прекрасно наследуется
Так я про это и говорю, что не наследуется, если только в классе есть конструктор с таким именем, если нет - то наследуется.
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
22.04.2011, 14:23
а как ты себе представляешь наследование если ты объявил новый конструктор в классе?
то же самое и с функциями, объяви в паблике класса mytype
функцию
Delphi
1
function ab(a,b:integer):integer;
потом
ob2.a и нажми ctrl+пробел будет видно что эта функция доступна.
теперь в классе mytype2 объяви такую-же функцию но с другими параметрами
Delphi
1
function ab(c,d:integer):integer;
и опять ob2.a и нажми ctrl+пробел и уже компилятор напишет что доступна функция из класса mytype2, а из класса mytype не будет
0
37 / 37 / 6
Регистрация: 17.04.2011
Сообщений: 449
22.04.2011, 14:25  [ТС]
Цитата Сообщение от anonimus Посмотреть сообщение
а как ты себе представляешь наследование если ты объявил новый конструктор в классе?
то же самое и с функциями, объяви в паблике класса mytype
функцию
Delphi
1
function ab(a,b:integer):integer;
потом
ob2.a и нажми ctrl+пробел будет видно что эта функция доступна.
теперь в классе mytype2 объяви такую-же функцию но с другими параметрами
Delphi
1
function ab(c,d:integer):integer;
и опять ob2.a и нажми ctrl+пробел и уже компилятор напишет что доступна функция из класса mytype2, а из класса mytype не будет
Я имею ввиду, что не наследуются перегруженные конструкторы с другими параметрами с таким же именем.
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
22.04.2011, 14:30
Akmas, что-т я тебя не понимаю. ты опиши как ты себе представляешь наследование на примере кода что ты выложил выше, просто логическую структуру.

Цитата Сообщение от Akmas Посмотреть сообщение
что не наследуются перегруженные конструкторы с другими параметрами с таким же именем.
так ничего не наследуется, не то что конструкторы.
0
37 / 37 / 6
Регистрация: 17.04.2011
Сообщений: 449
22.04.2011, 14:32  [ТС]
Ну значит, остаётся сделать вывод, что конструктор в делфи наследуется по тем же правилам, как и все остальные методы)).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.04.2011, 14:32
Помогаю со студенческими работами здесь

Почему говорят, что при создании базы данных в качестве ID нужно использовать uniqueidentifier
Слышал из одного видеоурока по ADO.NET, что обычно в базах данных в качестве ID не используют автоинкрементироуемый int или подобный тип...

Наследуется ли конструктор базового класса?
Вот такой вопрос по java, что то слышал про слово SUPER это из той оперы ? Можно поподробней ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru