Abstract类继承具有相同函数名的另一个抽象类

时间:2013-01-20 12:03:10

标签: c++ class inheritance virtual abstract

 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个具有相同名称的纯虚函数是否有效?

2 个答案:

答案 0 :(得分:5)

  

是否会调用正确的更新函数(在myObject中实现的函数)?

是的,它会被调用。

  

在一个“系列”中有2个具有相同名称的纯虚函数是否有效?

第二个声明(即在entity类内)没有在家族中引入第二个纯虚函数:签名是相同的,因此update()是一个虚函数。此外,不需要第二次声明它:entity将保持抽象,即使您删除了第二个声明,也可以访问update()方法。

答案 1 :(得分:1)

虚函数或虚方法是一种函数或方法,其行为可以通过具有相同签名的函数在继承类中重写。

所以答案是