У меня есть массив, содержащий ссылки на мягкий базовый тип, назовем его 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
желаемый эффект?