C++ 从子类调用非虚方法
根据多态性,我知道您不能调用非虚拟函数/方法 例: 这适合我的需要,但我想知道这是否是“正确”的方法。有没有更有效的方法使用多态性调用子类方法C++ 从子类调用非虚方法,c++,class,function,polymorphism,parent,C++,Class,Function,Polymorphism,Parent,根据多态性,我知道您不能调用非虚拟函数/方法 例: 这适合我的需要,但我想知道这是否是“正确”的方法。有没有更有效的方法使用多态性调用子类方法 Entity *instance = new Enemy(); Enemy e = *(Enemy*)instance; 创建一个新的敌人对象,然后将实例指向的对象指定给它。这是多余的。然后 instance = &e; 导致内存泄漏,因为您刚刚丢失了指向新敌人()的指针,并且尚未将其删除 我将把setter函数添加到实体中,因为运行状况
Entity *instance = new Enemy();
Enemy e = *(Enemy*)instance;
创建一个新的敌人对象,然后将实例指向的对象指定给它。这是多余的。然后
instance = &e;
导致内存泄漏,因为您刚刚丢失了指向新敌人()的指针,并且尚未将其删除
我将把setter函数添加到实体中,因为运行状况在实体中。然后通过public
Entity::SetHealth()
@billz good point调用它。Donno为什么OP特别想这么做。但你是对的,至少我应该建议这样做。这不是我想在我的程序中做的,只是一个简单的例子来解释我想做什么的概念,但这是为了启发。事实上,我首先使用了这个方法,然后又恢复到我发布的方法,但我甚至没有想到内存泄漏。愚蠢的想法哦,好吧,谢谢你help@CodingMadeEasy然后进行static\u cast
。我想这就是你需要的。
Entity *instance = new Enemy();
Enemy e = *(Enemy*)instance;
instance = &e;
int main()
{
Entity *instance = new Enemy();
Enemy *e = static_cast<Enemy*>(instance);
^^
e->SetHealth(1);
}
class Entity
{
public:
Entity() { health = 10; }
void DisplayHealth() { std::cout << health << std::endl; }
void SetHealth(int n) { health = n; }
protected:
int health;
};
int main()
{
Entity *instance = new Enemy();
instance->SetHealth(1); // Not Error Anymore
return 0;
}