【发布时间】:2011-07-31 18:52:12
【问题描述】:
这是基于我之前提出的一个问题。 类如下所示:
class Enemy
{
public:
void sayHere()
{
cout<<"Here"<<endl;
}
virtual void attack()
{
}
};
class Monster: public Enemy
{
public:
void attack()
{
cout<<"RAWR"<<endl;
}
};
class Ninja: public Enemy
{
public:
void attack()
{
cout<<"Hiya!"<<endl;
}
};
我是 C++ 新手,我很困惑为什么这只适用于指针(Ninja 和 Monster 都来自 Enemy):
int main()
{
Ninja ninja;
Monster monster;
Enemy *enemies[2];
enemies[0] = &monster;
enemies[1] = &ninja;
for (int i = 0; i < 2; i++)
{
enemies[i]->attack();
}
return 0;
}
为什么我不能这样做?:
int main()
{
Ninja ninja;
Monster monster;
Enemy enemies[2];
enemies[0] = monster;
enemies[1] = ninja;
for (int i = 0; i < 2; i++)
{
enemies[i].attack();
}
return 0;
}
【问题讨论】:
-
+1,这个问题其实很有趣。当然,我知道为什么第二个示例不起作用,但是如果有人知道为什么 C++ 标准根本不支持第二个示例,我会很感兴趣(毕竟,“自动”复制所有必需的值从派生类型理论上不应该那么难)。
-
@heishe,这叫切片,你google一下,有点烂
-
“公敌”的奖励积分 ;)
-
我喜欢忍者在攻击时友好地向你打招呼。
标签: c++ arrays pointers polymorphism