Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
#1

Почему компилятору нужно динамическое связывание? - C++

18.04.2013, 20:23. Просмотров 258. Ответов 2
Метки нет (Все метки)

Допустим
C++
1
A *ptr = &B; ptr->addvalue;
, при компиляции не подставится адрес функции вместо имени, потому что ещё не создана таблица виртуальных функций, которая создается при выполнении программы в конструкторе класса и в которой можно было бы посмотреть к какому классу принадлежит метод addvalue, то есть его адрес? А почему нельзя было реализовать с статическим связыванием? То есть почему бы это не получилось, если не использовать virtual, а что то другое?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2013, 20:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему компилятору нужно динамическое связывание? (C++):

Динамическое связывание - C++
Здравствуйте! Возник вопрос. Если у нас есть if и в теле if создаётся переменная, то какое в данном случае связывание? Я предполагаю, что...

Динамическое связывание DLL - C++
Как создавать библиотеку dll и чтобы работала программа, которую я напишу? Как осуществить динамическое связывание без импорта?

Почему не работает позднее связывание - C++
Здравствуйте. В приведенном коде есть класс-шаблон А, и его наследники (классы B,C,D). В main создаю масcив указателей на базовый шаблонный...

Для чего нужно динамическое выделение памяти - C++
Расскажите пожалуйста про динамическое выделение памяти в примерах если можно.Зачем оно нужно,почему без него никак?(в конкретных...

Вопрос по компилятору - C++
Подскажите пожалуйста, как откомпилировать код в MS VC++ 2010. Вот, например, в MS VC++ 2010 есть команда build, а в этом ковом куда надо...

Скормить С код С++ компилятору? - C++
Здравствуйте. Ради интереса я решал следующую задачку: Выражения языка L записываются по обычным правилам и строятся с помощью знаков...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
18.04.2013, 20:33 #2
Цитата Сообщение от mzarb Посмотреть сообщение
, при компиляции не подставится адрес функции вместо имени, потому что ещё не создана таблица виртуальных функций, которая создается при выполнении программы в конструкторе класса и в которой можно было бы посмотреть к какому классу принадлежит метод addvalue, то есть его адрес? А почему нельзя было реализовать с статическим связыванием? То есть почему бы это не получилось, если не использовать virtual, а что то другое?
Неохото цепляться к словам, все равно вопроса не понял.
Имелось ввиду почему при реализации полиморфизма используется позднее связывание?
пример
C++
1
2
3
4
5
6
7
8
9
10
A *ptr;
 
std::cin >> type;
if (type == 1) {
    ptr = new B;
} else {
    ptr = new C;
}
 
ptr->show();
в данном примере на этапе компиляции соверешенно не известно какая функция будет вызвана, поэтому используется т.н. позднее связывание.
nantexnik
8 / 8 / 2
Регистрация: 24.05.2012
Сообщений: 18
18.04.2013, 20:38 #3
не совсем понятен вопрос. Что куда не подставится, что не произойдет и т.д..
ptr->addvalue; написано с ошибкой, если вы про метод говорите то () нужны. Почему нужно вместо virtual использовать что-то другое, если для этого есть virtual ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2013, 20:38
Привет! Вот еще темы с ответами:

Нужно немного переделать программу: использовать функции и динамическое выделение памяти - C++
Помогите переделать программу в соответствии с условиями: а) для хранения массивов используйте динамически распределяемую память; б)...

Как подключить библиотеку gluit к компилятору? - C++
В общем, посмотрел на ютубе ролик с созданием змейки, решил попробовать сделать. Там все прекрасно описано, кроме подключения OpenGL и...

Что-то компилятору не нравится. Ввод-вывод - C++
Да-да КОКОКО, БЫДЛОКОД, МАМКУ... Я его испоганил до ужаса, а компиль всё равно не хочет работать... #include"pch.h" ...

Создание программы, которая будет обращаться к компилятору - C++
Хочу написать программу, которая будет обращаться к компилятору, в нём же она будет проверять работоспособность кода, который напишут в...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru