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

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

Войти
Регистрация
Восстановить пароль
 
Enfernuz
22 / 22 / 1
Регистрация: 11.04.2011
Сообщений: 67
#1

Вопрос по динамическому полиморфизму - C++

03.09.2011, 22:04. Просмотров 458. Ответов 3
Метки нет (Все метки)

Здравствуйте. Прочитал про статический и динамический полиморфизмы.
Возник такой вопрос. Имеем код:

C++
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
#include <iostream>
 
class base
{
    ...
    public:
        base(...) { ... };
        virtual ~base(){};
        virtual void DoSmth();
};
 
void base::DoSmth()
{
       cout<<"Base"<<endl; 
}
 
class derived: public base
{
    ...
    public:
        derived(...): base(...) { ... };
        ~derived(){}
        void DoSmth();
};
 
void derived::DoSmth()
{
       cout<<"Derived"<<endl;
}
 
int main()
{
 
    base* p;
    derived d(...);
    p = &d;
    p->DoSmth();
 
    return 0;
}
Почему происходит позднее связывание? Разве на этапе компиляции при вызове метода DoSmth() компилятор не может узнать тип объекта, на который ссылается указатель родительского класса?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.09.2011, 22:04     Вопрос по динамическому полиморфизму
Посмотрите здесь:

объясните по полиморфизму - C++
здравствуйте, не могу разобраться с следующей деталью: есть базовый класс, и несколько производных от него классов. У всех...

Какое отношение имеет перегрузка к полиморфизму? - C++
прочитал в одном учебнике: (глава посвящена функциям. Подраздел: Перегрузка функций) &quot;В результате перегрузки функций происходит явление,...

Поиск по динамическому массиву - C++
Задан целочисленный двумерный массив a из n строк и m столбцов. Найти номер последнего максимального значения среди нечетных (по значению)...

Доступ к динамическому массиву - C++
Первый раз столкнулся с такой фигней. Что происходит? #include &lt;iostream&gt; using namespace std; int main(int argc, char...

Подскажите книжку по динамическому программированию. - C++
Доброго времени суток! Наткнулся на такое понятие, как динамическое программирование, горю желанием узнать больше. Пожалуйста,...

Переход от статического к динамическому массиву - C++
Есть некая структура some_struct. Необходимо перейти от статического массива этих структур some_struct *Table; к динамическому ...

Добавление памяти динамическому массиву - C++
пытаюсь доканать динамические массивы (vector не предлагать, с ним все ок). суть задачи. есть массив структур, возникает необходимость...

Адаптировать задачу по динамическому программированию на рекурсию - C++
Добрый день, написал код, решающий задачу динамическим программированием. Есть тот,кто сможет помочь с адаптацией ее под рекурсию? ...

Нужен урок по одномерном и двумерному динамическому массиву - C++
Нужен урок по одномерном и двумерному динамическому массиву

Создать функцию, добавляющую столбец двухмерному динамическому массиву - C++
Доброго времени суток, уважаемые форумчане! Помогите, пожалуйста, разобраться как написать функцию, удаляющую столбец двумерному...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
03.09.2011, 22:19     Вопрос по динамическому полиморфизму #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Base { public: virtual void f(){} };
 
class A : public Base { public: virtual void f(){std::cout << "A";} };
class B : public Base { public: virtual void f(){std::cout << "B";} };
class C : public Base { public: virtual void f(){std::cout << "C";} };
 
int main()
{
   Base* base = 0;
   switch( rand() % 3 )
   {
       case 0: base = new A; break;
       case 1: base = new B; break;
       case 2: base = new C; break;
   }
   base->f();
}
как вы думаете - какие шансы у компилятора?
Enfernuz
22 / 22 / 1
Регистрация: 11.04.2011
Сообщений: 67
03.09.2011, 22:27  [ТС]     Вопрос по динамическому полиморфизму #3
Я ему не завидую
Просто были наивные сомнения по поводу того, как ведёт себя компилятор, если в коде не встречается "случайных" событий (как в моём примере). Но, судя по всему, в стандарте всё чётко прописано и разницы нет Спасибо.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
03.09.2011, 22:32     Вопрос по динамическому полиморфизму #4
Enfernuz, способ реализации наследования зависит сугубо от компилятора, но в большинстве случаев, когда мы используем виртуальные функции мы подразумеваем, что на момент выполнения реальный тип нам не известен
те такой упрощенный вариант как у вас редко может встретиться
может быть компилятор чтото и сооптимизирует, но наврятли, затраты на вызов виртуальных функций не столь уж и велики
Yandex
Объявления
03.09.2011, 22:32     Вопрос по динамическому полиморфизму
Ответ Создать тему
Опции темы

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