【发布时间】:2011-05-11 16:11:48
【问题描述】:
class Material
{
public:
void foo()
{
cout << "Class Material";
}
};
class Unusual_Material : public Material
{
public:
void foo()
{
cout << "Class Unusual_Material";
}
};
int main()
{
Material strange = Unusual_Material();
strange.foo(); //outputs "Class Material"
return 0;
}
我希望这会导致“Class Unusual_Material”显示在控制台上。有没有办法可以做到这一点?在我的程序中,我有一个 Material 类,从中派生出其他更具体的材料。方法 Material::foo() 表示 Material 中适用于大多数材料的方法,但有时,需要为具有不寻常属性的材料定义另一个 foo()。
我的程序中的所有对象都包含一个 Material 字段。如果为它们分配了不寻常的材料,我希望调用派生的、不寻常的 foo。
这可能很容易,或者不可能,但我无法弄清楚。
谢谢
【问题讨论】:
-
请注意,
Material strange = Unusual_Material();之类的代码可能会导致对象切片问题:stackoverflow.com/questions/274626/…
标签: c++ derived-class base-class