【发布时间】:2012-05-10 19:30:26
【问题描述】:
Edit Solved and Reposted 作为示例程序
场景如下:
类层次结构:
class Base
{
public:
virtual void output() = 0;
private:
int a;
};
class Derived_1 : public Base
{
public:
virtual void output()
{
cout << "Derived_1" << endl;
}
};
class Derived_2 : public Derived_1
{
public:
virtual void output()
{
cout << "Derived_2" << endl;
}
};
实现:
Derived_2* obj = reinterpret_cast<Derived_2*>(new Derived_1());
obj->output();
这将输出“Derived_1”而不是“Derived_2”。我相信这对你们大多数人来说并不新鲜,但这是我在应用程序中创建一些工厂函数时没有考虑到的。
【问题讨论】:
-
不应该
derived_2继承自derived_1?和derived_1来自Base?这只是一个错字吗? -
看起来您缺少代码的重要部分。例如,derived_1 是否从 Base 派生(也,您的意思是 base,对)。派生_2 派生自派生_1 吗?基地?
-
我认为derived_2 不是从您的示例中的任何内容派生的错字? derived_1 也不是从任何东西派生而来的。
-
do_something仍然是私有的;只需发布您的实际代码。 -
现在
Value_object_data::new_VO_data()不见了,但我开始明白了。不过,这家reinterpret_cast的公司闻起来很糟糕。
标签: c++ templates virtual-functions