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