从派生类调用base方法

时间:2010-10-20 16:15:09

标签: c++ class derived

例如,我有这样的课程:

class Base
{
   public: void SomeFunc() { std::cout << "la-la-la\n"; }
};

我从中获得了新的一个:

class Child : public Base
{
   void SomeFunc()
   {
      // Call somehow code from base class
      std::cout << "Hello from child\n";
   }
};

我想看看:

la-la-la
Hello from child

我可以从派生类调用方法吗?

5 个答案:

答案 0 :(得分:10)

不确定

void SomeFunc()
{
  Base::SomeFunc();
  std::cout << "Hello from child\n";
}

由于Base::SomeFunc()未声明为virtual,因此Derived::SomeFunc() 隐藏在基类中,而不是覆盖它,从长远来看,肯定会引起一些令人讨厌的惊喜。因此,您可能希望将声明更改为

public: virtual void SomeFunc() { ... }

这也会自动生成Derived::SomeFunc() virtual,但为了清晰起见,您可能更愿意明确声明这一点。

答案 1 :(得分:4)

class Child : public Base
{
   void SomeFunc()
   {
      // Call somehow code from base class
      Base::SomeFunc();
      std::cout << "Hello from child\n";
   }
};

顺便说一句,您可能也想Derived::SomeFunc public

答案 2 :(得分:1)

您可以通过再次调用前缀为parent类名称的函数来执行此操作。您必须为类名添加前缀,因为可能有多个父级提供名为SomeFunc的函数。如果有一个名为SomeFunc的免费函数,你希望调用它来代替:: SomeFunc可以完成工作。

答案 3 :(得分:0)

class Child : public Base
{
   void SomeFunc()
   {
      Base::SomeFunc();
      std::cout << "Hello from child\n";
   }
};

答案 4 :(得分:0)

是的,你可以。请注意,您为方法指定了相同的名称而没有将它们限定为virtual,编译器也应注意它。

class Child : public Base
{
   void SomeFunc()
   {
      Base::SomeFunc();
      std::cout << "Hello from child\n";
   }
};