Вопрос про полиморфизм
От: blacksun  
Дата: 26.06.11 20:10
Оценка:
using namespace std;

class A
{
public:

    A()
    {
        func2();
    }

    void func1()
    {
        func2();
    }

    virtual void func2()
    {
        cout << "A func2" << endl;
    }
};


class B : public A
{
public:
    void func2()
    {
        cout << "B func2" << endl;
    }
};


int _tmain(int argc, _TCHAR* argv[])
{

    B b;
    b.func1();

    A *aa = dynamic_cast<A *>(&b);
    aa->func1();

    return 0;
}



При запуске программы, имеем следующий вывод:

A func2
B func2
B func2


Можно прокомментировать всю подноготную вопроса??
Я понимаю следующим образом:
С первой строкой все ясно, вызвалась из конструктора A, B еще и помине нет, поэтому "B func2" мы по любому бы никогда не увидели
Со второй тоже вроде как ясно. Вызываем унаследованный func1, он пытается вызвать func2, происходит поиск по таблице виртуальных функций обьекта B, находится перегруженный func2 и вызывается именно он.
А во с третьей строкой непонятно. Почему так??
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.