139 / 137 / 66
Регистрация: 15.05.2012
Сообщений: 515
1

Есть ли механизмы наследования в C++ как в Delphi?

02.02.2016, 17:53. Показов 2733. Ответов 82
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую.
Я Delphi'ст. И интересует следующий вопрос. А именно в чём различие методов классов abstract от virual в плане наследования?
Приведу пример на delphi:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
type
  TBaseClass = class
   public
     procedure BlaBla(); virtual;
  end;
 
  TNextClas = class (TBaseClass) // наследование от базового класса
    public
     // procedure BlaBla(); virtual; // наследуется от базового (копия) и может перекрыт при наследовании
  end;
 
  TNextClas2 = class (TNextClas) // наследование класса
    public
     // procedure BlaBla(); virtual; // та же петрушка) но от TNextClas
  end;
В данном случае, при наследовании классов метод BlaBla основного класса (TBaseClass) будет унаследован другими классами (предками), без явного их описания, т.е. скопирован. При этом если описать метод BlaBla() следующем образом (является медленным):
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
type
  TBaseClass = class
   public
     procedure BlaBla(); dynamic;
  end;
 
  TNextClas = class (TBaseClass) // наследование от базового класса
    public
     // procedure BlaBla(); dynamic; // ссылается на базовый класс, и не копируется
  end;
 
  TNextClas2 = class (TNextClas) // наследование класса
    public
     // procedure BlaBla(); dynamic; // та же петрушка) Ссылается на метод BlaBla() класса TBaseClass
  end;
Т.е. во втором случае BlaBla() метод не копируется классами предками, а только ссылается на метод базового класса.
В общем как обстаят дела у с++ при наследовании классов?
Заранее благодарю...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.02.2016, 17:53
Ответы с готовыми решениями:

Как правильно использовать механизмы наследования и полиморфизма для создания единого интерфейса
Доброго времени суток Комрады! Я невкурю тему про полиморфную обработку или как кошерно_правильно...

Разработать и реализовать иерархию классов, используя механизмы наследования
Добрый день, помогите, пожалуйста! очень нужна помощь! Необходимо разработать и реализовать...

Какие есть механизмы идентификации, аутентификации и авторизации?
Здравствуйте! Ни кто не знает материала про систему идентификации, аутентификации и авторизации в...

Программирование системы подсказок - есть ли стандартные механизмы?
Требуется сделать систему помощи программы. Есть ли встроенные средства в .NET(c#)? Спасибо за...

82
Комп_Оратор)
Эксперт по математике/физике
8948 / 4702 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
04.02.2016, 14:56 81
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от avgoor Посмотреть сообщение
Затенение и сокрытие/перекрытие - синонимы.
Я их так и использовал.
Цитата Сообщение от avgoor Посмотреть сообщение
В производном классе так же.
Не поняли что я говорю.
Затенение функции переменной в глобальной области и у пары base-derived работает похоже. Я и сказал, что Ваш пример:
Цитата Сообщение от IGPIGP Посмотреть сообщение
как раз показывает, что области видимости базового и производного работают так, как будто это одна область
Но различие состоит в повторном объявлении имени функции. Повторю, что хотел сказать: Метод базового класса есть в наследнике (по имени, доступ то есть) пока не появилось объявление метода с тем же именем. Даже если прототип отличен. В глобальной области происходит перегрузка. А тут пропадает то что было (затеняется/перекрывается).
0
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
04.02.2016, 16:01 82
IGPIGP, В одной области не может быть двух определений одной переменной. Т.е. это разные области.

Добавлено через 1 минуту
Область видимости родительского класса - внешняя по отношению к наследнику.
0
Комп_Оратор)
Эксперт по математике/физике
8948 / 4702 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
04.02.2016, 18:37 83
Цитата Сообщение от avgoor Посмотреть сообщение
В одной области не может быть двух определений одной переменной.
Я нигде не писал что может.
Цитата Сообщение от avgoor Посмотреть сообщение
Т.е. это разные области.
Та не, если это одна область, то она-таки одна и есть. Судя по тому как идёт диалог, предлагаю его просто остановить.
0
04.02.2016, 18:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.02.2016, 18:37
Помогаю со студенческими работами здесь

Какие механизмы для защиты кучи есть?
Необходимо отключить механизмы защиты от переполнения кучи стоит windows 8.1 vs 12 -13 при...

Есть ли в Oracle механизмы работы с очень большими объемами данных ?
Проблема такая: Есть база, которой пользуемся уже 4 года, структура базы такова, что есть...

Есть исходник DLL на Delphi как (и возможно ли) написать похожее на VB.NET и использовать в среде программы написанной на Delphi
Суть вопроса вкратце такова - Есть исходник DLL написанной на Delphi Library Extdll; uses ...

Распределённые системы. Как именно реализовываются механизмы масштабируемости?
Пишу простую распределённую систему. Её задача - связать каждый узел с каждым гарантированно за...


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

Или воспользуйтесь поиском по форуму:
83
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru