代码之家  ›  专栏  ›  技术社区  ›  Max Frai

从派生类调用基方法

  •  3
  • Max Frai  · 技术社区  · 15 年前

    例如,我有这样的课程:

    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 回复  |  直到 13 年前
        1
  •  10
  •   Péter Török    15 年前

    当然:

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

    BTW自 Base::SomeFunc() 未申报 virtual , Derived::SomeFunc() 兽皮 它在基类中而不是 压倒一切 从长远来看,这肯定会造成一些令人不快的惊喜。所以你可以把你的声明改为

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

    这会自动使 派生::somefunc() 事实上的 另外,尽管为了清晰起见,您可能更愿意明确地声明它。

        2
  •  4
  •   Steve Townsend    15 年前
    class Child : public Base
    {
       void SomeFunc()
       {
          // Call somehow code from base class
          Base::SomeFunc();
          std::cout << "Hello from child\n";
       }
    };
    

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

        3
  •  1
  •   stonemetal    15 年前

    为此,可以再次调用以父类名称为前缀的函数。您必须给类名加前缀,因为可能有多个父类提供了一个名为somefunc的函数。如果有一个名为somefunc的自由函数,您希望改为调用它::somefunc将完成该任务。

        4
  •  0
  •   codymanix    15 年前
    class Child : public Base
    {
       void SomeFunc()
       {
          Base::SomeFunc();
          std::cout << "Hello from child\n";
       }
    };
    
        5
  •  0
  •   Keynslug    15 年前

    是的,你可以。请注意,在不限定方法为 virtual 编译器也应该注意到这一点。

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