Каковы правила поиска виртуальных функций?

#include <iostream>
class base
{
    public:
    virtual void print (int a)
    {   
        std::cout << "a: " << a << " base\n";
    }   
    virtual void print (int a, int b)
    {   
        std::cout << "base\n";
    }   
};

class derived : public base
{
    public:
    virtual void print (double d)
    {   
        std::cout << "derived\n";
    }   
};

int main ()
{
    int i = 10; 
    double d = 10000.0;
    base *b = new derived (); 
    b->print (i, i); 
    b->print (d);

    return 0;
}

Вывод этой функции:

base
a: 10000 base
  • Почему b-> print (d) не вызывает реализацию производного класса и выполняет статическое приведение к 'd' , чтобы обеспечить соответствие базовому классу реализация?
  • Какое правило применяется здесь во время поиска виртуальной функции?
5
задан iammilind 10 January 2017 в 09:51
поделиться