class subscriber
{
public:
virtual void update() = 0;
}
class entity : public subsriber
{
public:
virtual void update() = 0;
}
class myObject : public entity
{
public:
virtual void update()
{
do_things();
}
}
subscriber * ptr = new myObject; //will use shared_ptr, but here i want simplicity
ptr->update();
问题是,是否会调用正确的更新函数(在myObject中实现的函数)?在一个“家庭”中有2个具有相同名称的纯虚函数是否有效?
答案 0 :(得分:5)
是否会调用正确的更新函数(在myObject中实现的函数)?
是的,它会被调用。
在一个“系列”中有2个具有相同名称的纯虚函数是否有效?
第二个声明(即在entity
类内)没有在家族中引入第二个纯虚函数:签名是相同的,因此update()
是一个虚函数。此外,不需要第二次声明它:entity
将保持抽象,即使您删除了第二个声明,也可以访问update()
方法。
答案 1 :(得分:1)
虚函数或虚方法是一种函数或方法,其行为可以通过具有相同签名的函数在继承类中重写。
所以答案是是。