Полиморфизм C ++, неполное понижающее преобразование

У меня есть массив, содержащий ссылки на мягкий базовый тип, назовем его Object .

Я получил Class1 из Object и Class2 из Class1 .

#include <vector>

class Object {};
class Class1 : public Object {
public:
virtual std::string ToString() {return "it is 1";}
};
class Class2 : public Class1 {
public:
    virtual std::string ToString() {return "it is 2";}
};

int _tmain(int argc, _TCHAR* argv[])
{
    std::vector<Object *> myvec;
    myvec.push_back(new Class2());
    printf("%s", (static_cast<Class1*>(myvec[0]))->ToString().c_str());
    return 0;
}

Я вызываю ToString () путем преобразования из Object * в Class1 * вот так

    printf("%s", (static_cast<Class1*>(myvec[0]))->ToString().c_str());

Мой вопрос: будет ли это выводить 1 или 2, когда объект на самом деле относится к Class2 , но не к этому конкретно? Дает ли ключевое слово virtual желаемый эффект?

0
задан John 10 December 2011 в 23:32
поделиться