首先,让我为标题道歉,老实说,我想不出如何更好地说出来。 下面的例子应该让我的问题更加清晰:
class Foo {
public:
Foo(int x);
};
class Bar : public Foo
{
public:
Bar(int y) : Foo(y);
};
演示强制Bar构造函数使用参数Y调用Foo构造函数的代码。我的问题是,是否有类似的方法来继承派生类函数来调用基类函数?
例如,对Bar.Func();
的所有来电也会自动拨打Foo.Func();
?
答案 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()叫做