访问派生属性和给定基指针的方法的更简单方法
More simple way to access derived properties & methods given base pointer
现在,我有此代码,它正常工作。为了在给出基本类型防御*时设置对象类型大炮的属性*,我将大炮*施放并使用它来设置属性。
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
方法仅存在于加农炮内部,而不存在于防御中。我有6种不同类型的课程,这些课程从防御中获得了自己的额外特性,而Cannon是一个。
我的问题是:比检查对象的类型并为每个指针创建一个新的(铸造)指针以设置其属性更简单吗?
您可以在Defense
中添加虚拟方法:
class Defense
{
public:
virtual ~Defense()
virtual void fillProperties() = 0;
// [...]
};
class Canon : public Defense
{
public:
virtual void fillProperties() override
{
cout << "Cannon ball damage (hp): ";
cin >> this->cannonBallDamage;
cout << "Cannon ball speed (ft/sec): ";
cin >> this->cannonBallSpeed;
cout << "Blast radius (ft): ";
cin >> this->blastRadius;
}
// [...]
private:
double cannonBallDamage, cannonBallSpeed, blastRadius;
};
访问者模式可用于避免在Defense
相关文章:
- 将一个类的方法指针存储到另一个类中
- 如何调用返回类方法指针的类方法
- 通过reinterpret_casting方法指针从指针调用派生类的方法。这是 UB 吗?
- 泛型方法指针.reinterpret_cast指向不同类的方法指针,这是 UB 吗?
- C++;类方法指针;λ;将 lambda 作为成员函数指针传递;
- 使用模板、方法指针和字符串键入推导
- 将方法指针作为整数参数发送到C#的C 方法
- 从C 中的VTable获取方法指针
- 模板化方法指针 - 无法匹配函数参数的指针
- 获取特定的模板重载方法指针
- 如何将方法指针声明为Typedef方法参数
- 如何将方法指针类型转换为函数指针类型
- 如何在使用 pthreads 时将方法指针作为函数参数传递C++
- 方法指针映射,编译器说他们不接受任何参数
- C# 方法指针,如 C++ 中的指针
- c++创建新的LinkedList类:Clear()方法指针被释放未分配
- 尝试获取类方法指针时出现E_NOINTERFACE
- 传递和强制转换方法指针
- 常量方法指针的类型是什么
- 将对象的方法指针传递给接受 [静态方法指针/全局函数] 指针的函数