是否可以从基类函数“继承”派生函数?

时间:2011-11-10 14:35:18

标签: c++ inheritance

首先,让我为标题道歉,老实说,我想不出如何更好地说出来。 下面的例子应该让我的问题更加清晰:

class Foo    {
    public:
      Foo(int x);
    };

class Bar : public Foo
{
public:
  Bar(int y) : Foo(y);
};

演示强制Bar构造函数使用参数Y调用Foo构造函数的代码。我的问题是,是否有类似的方法来继承派生类函数来调用基类函数?

例如,对Bar.Func();的所有来电也会自动拨打Foo.Func();

4 个答案:

答案 0 :(得分:1)

class Foo    {
    public:
      Foo(int x);
  void DoIt();
    };

class Bar : public Foo
{
public:
  Bar(int y) : Foo(y);
  void DoIt();
};

void Bar::DoIt()
{
  Foo::DoIt();
}

如果Foo旨在从多态获得并使用DoIt,则应将virtual声明为virtual。此外,您还需要一个{{1}}基类析构函数。

答案 1 :(得分:0)

Foo中声明的任何公共函数也可以通过Bar访问(将调用相同的函数)。如果您可能需要覆盖Bar中的函数以更改其行为,请将其设为virtual

答案 2 :(得分:0)

自动,没有。不过,您可以使用Base::member()来调用它。

struct foo {
    void frob() { std::cout << "foo::frob" << std::endl; }
};

struct bar : foo {
    void frob() { foo::frob(); std::cout << "bar::frob" << std::endl; }
};

答案 3 :(得分:0)

如果您想从其基础“继承”函数F()的函数语句,那么这是您需要的代码。在Foo中声明F()虚拟,在那里实现一些语句。然后在Bar中声明F()并在Bar :: F()的实现开始时调用Foo :: F():

class Foo {
public:
  Foo(int i) { cout << "Foo(" << i << ") called." << endl; }
  virtual void F() { cout << "foo::F() called." << endl; }

  virtual ~Foo() {};
};

class Bar : public Foo {
public:
  Bar(int i) : Foo(i) { cout << "Bar(" << i << ") called" << endl; }
  void F()  { Foo::F(); cout << "bar::F() called" << endl; }
};

int main(int argc, char** argv) {
  Bar b(3);
  b.F();
}

给出

Foo(3)叫。
Bar(3)叫做 foo :: F()调用。
bar :: F()叫做