Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Enfernuz
22 / 22 / 2
Регистрация: 11.04.2011
Сообщений: 67
#1

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

03.09.2011, 22:04. Просмотров 481. Ответов 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() компилятор не может узнать тип объекта, на который ссылается указатель родительского класса?
http://www.cyberforum.ru/cpp-beginners/thread957106.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.09.2011, 22:04
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вопрос по динамическому полиморфизму (C++):

Какое отношение имеет перегрузка к полиморфизму?
прочитал в одном учебнике: (глава посвящена функциям. Подраздел: Перегрузка...

Доступ к динамическому массиву
Первый раз столкнулся с такой фигней. Что происходит? #include &lt;iostream&gt;...

Поиск по динамическому массиву
Задан целочисленный двумерный массив a из n строк и m столбцов. Найти номер...

Подскажите книжку по динамическому программированию.
Доброго времени суток! Наткнулся на такое понятие, как динамическое...

Переход от статического к динамическому массиву
Есть некая структура some_struct. Необходимо перейти от статического массива...

3
alex_x_x
бжни
2454 / 1660 / 134
Регистрация: 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();
}
как вы думаете - какие шансы у компилятора?
1
Enfernuz
22 / 22 / 2
Регистрация: 11.04.2011
Сообщений: 67
03.09.2011, 22:27  [ТС] #3
Я ему не завидую
Просто были наивные сомнения по поводу того, как ведёт себя компилятор, если в коде не встречается "случайных" событий (как в моём примере). Но, судя по всему, в стандарте всё чётко прописано и разницы нет Спасибо.
0
alex_x_x
бжни
2454 / 1660 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
03.09.2011, 22:32 #4
Enfernuz, способ реализации наследования зависит сугубо от компилятора, но в большинстве случаев, когда мы используем виртуальные функции мы подразумеваем, что на момент выполнения реальный тип нам не известен
те такой упрощенный вариант как у вас редко может встретиться
может быть компилятор чтото и сооптимизирует, но наврятли, затраты на вызов виртуальных функций не столь уж и велики
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2011, 22:32
Привет! Вот еще темы с решениями:

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

Зачем нужен динамическому массиву указатель?
1) Зачем когда обьявляем массив нужен указатель? 2) почему если массив...

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

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


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

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

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