gpt4 book ai didi

c++ - 从基类引用调用派生类方法

转载 作者:可可西里 更新时间:2023-11-01 15:39:53 27 4
gpt4 key购买 nike

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 。 Material::foo() 方法表示 Material 中的一种方法,它适用于大多数 Material ,但有时,需要为具有异常属性的 Material 定义另一个 foo() 。

我程序中的所有对象都包含一个 Material 字段。如果为它们分配了不寻常的 Material ,我希望调用派生的、不寻常的 foo。

这可能非常简单,也可能是不可能的,但无论哪种方式我都无法弄清楚。

谢谢

最佳答案

你想要的是多态性,要为一个函数启用它,你需要让它成为 virtual:

class Material 
{
public:
virtual void foo() // Note virtual keyword!
{
cout << "Class Material";
}
};

class Unusual_Material : public Material
{
public:
void foo() // Will override foo() in the base class
{
cout << "Class Unusual_Material";
}
};

此外,多态性仅适用于引用和指针:

int main()  
{
Unusual_Material unusualMaterial;
Material& strange = unusualMaterial;
strange.foo();
return 0;
}

/* OR */

int main()
{
Unusual_Material unusualMaterial;
Material* strange = &unusualMaterial;
strange->foo();
return 0;
}

您的代码片段中的内容将 slice the Unusual_Material object :

int main() 
{
// Unusual_Material object will be sliced!
Material strange = Unusual_Material();
strange.foo();
return 0;
}

关于c++ - 从基类引用调用派生类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4209000/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com