我有两个班级,分别叫伯德和鹰。鹰是从鸟继承而来的。现在,我可以使用Bird类来存储Eagle类型的实例。但是,当我尝试使用变量a
调用eagle函数时,出现错误消息
错误:“班级鸟”没有名为“攻击”的成员
如何使用功能攻击?另外,打字稿会与之类似吗?
#include <stdio.h>
class bird{
public:
void fly(){
printf("fly");
}
};
class eagle: public bird{
public:
void attack(){
printf("attack");
}
};
int main()
{
bird *a = new eagle();
a->attack();
return 0;
}
答案 0 :(得分:0)
变量a
指向类型为bird
的对象的指针,因此只允许您调用在bird
类上定义的方法。这是有道理的-毕竟您不能将所有鸟类都视为老鹰。
您有几种选择:
bird
方法a
的类型更改为eagle*
dynamic_cast
来解决问题(不建议这样做,通常表明您对数据的建模不正确)dynamic_cast<eagle*>(a)->attack();
dynamic_cast
的文档:https://en.cppreference.com/w/cpp/language/dynamic_cast