3

例如,我有这样的课程:

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

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

4

5 回答 5

10

当然:

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

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

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

这也会自动Derived::SomeFunc() virtual生成,尽管为了清楚起见,您可能更喜欢明确声明它。

于 2010-10-20T16:17:34.343 回答
4
class Child : public Base
{
   void SomeFunc()
   {
      // Call somehow code from base class
      Base::SomeFunc();
      std::cout << "Hello from child\n";
   }
};

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

于 2010-10-20T16:17:05.787 回答
1

您可以通过再次调用以父类名称为前缀的函数来完成此操作。您必须在类名前加上前缀,因为可能有多个父级提供名为 SomeFunc 的函数。如果有一个名为 SomeFunc 的自由函数并且您希望调用它而不是 ::SomeFunc 将完成工作。

于 2010-10-20T16:22:13.513 回答
0
class Child : public Base
{
   void SomeFunc()
   {
      Base::SomeFunc();
      std::cout << "Hello from child\n";
   }
};
于 2010-10-20T16:18:28.433 回答
0

是的你可以。请注意,您为方法提供了相同的名称,但没有限定它们virtual,编译器也应该注意到它。

class Child : public Base
{
   void SomeFunc()
   {
      Base::SomeFunc();
      std::cout << "Hello from child\n";
   }
};
于 2010-10-20T16:19:44.180 回答