【发布时间】:2011-12-10 23:11:03
【问题描述】:
我有一个数组,其中包含对平淡基本类型的引用,我们称之为Object。
我从Object 和Class2 从Class1 派生了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;
}
我通过从Object * 转换为Class1 * 来调用ToString(),就像这样
printf("%s", (static_cast<Class1*>(myvec[0]))->ToString().c_str());
我的问题是,当对象实际上是 Class2 但没有具体向下转换时,这个输出会是 1 还是 2? virtual 关键字是否具有预期效果?
【问题讨论】:
-
我和法尔马里在一起;与提出问题并得到答案相比,尝试它所花费的时间更少。
-
不,这意味着加载我的手机模拟器,我它可能对其他人有用。给尼科尔一个直接的答案会花更少的时间吗?
-
@John:手机模拟器? C++是C++;这就是重点。您不必在手机上运行它来测试语言的基本功能。只需要一个 15 行的程序来测试它。
标签: c++ polymorphism virtual-functions static-cast