【发布时间】:2017-04-25 11:37:45
【问题描述】:
现在,我有这段代码,它按预期工作。为了在给定基本类型 Defense* 时设置对象类型 Cannon 的属性,我将 Cannon* 投射到它并使用它来设置属性。
void fillProperties(Defense* defense)
{
if (defense->getType() == "Cannon")
{
Cannon* c = (Cannon*)defense;
double cannonBallDamage, cannonBallSpeed, blastRadius;
cout << "Cannon ball damage (hp): ";
cin >> cannonBallDamage;
cout << "Cannon ball speed (ft/sec): ";
cin >> cannonBallSpeed;
cout << "Blast radius (ft): ";
cin >> blastRadius;
c->setBlastRadius(blastRadius);
c->setCannonBallDamage(cannonBallDamage);
c->setCannonBallSpeed(cannonBallSpeed);
}
}
setBlastRadius、setCannonBallDamage 和 setCannonBallSpeed 方法仅存在于 Cannon 内部,而不存在于 Defense 内部。我有 6 种不同类型的类,它们从 Defense 派生,具有自己的额外属性,Cannon 就是其中之一。
我的问题是:有没有比检查对象的类型并为每个对象创建一个新的(强制转换的)指针来设置其属性更简单的方法?
【问题讨论】:
标签: c++ pointers derived-class