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

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

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

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

18.04.2013, 20:23. Просмотров 251. Ответов 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++
C++ Вопрос по компилятору
Как подключить библиотеку gluit к компилятору? C++
Скормить С код С++ компилятору? C++
Что-то компилятору не нравится. Ввод-вывод C++
Почему нужно noexcept? C++
Нужно немного переделать программу: использовать функции и динамическое выделение памяти C++
C++ Динамическое связывание DLL
Создание программы, которая будет обращаться к компилятору C++
Для чего нужно динамическое выделение памяти C++
Как сообщить компилятору, чтобы код не проверялся на ошибки? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Форумчанин
Эксперт С++
4468 / 2830 / 224
Регистрация: 12.12.2009
Сообщений: 7,199
Записей в блоге: 1
Завершенные тесты: 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 ?
Yandex
Объявления
18.04.2013, 20:38     Почему компилятору нужно динамическое связывание?
Ответ Создать тему
Опции темы

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