7

考虑一个简单的继承类:

class Base 
{
  void func() {
     cout << "base" << endl;
  }
};

class Derived : public Base
{
  void func() {
      cout << "derived" << endl;
  } 
};

如果我运行 Derived::func() 我得到

derived

我想修改此代码以获得

base
derived

比覆盖更类似于扩展的东西。

我已经能够用构造函数得到类似的东西,但不能用普通函数。

非常感谢,卢西奥

4

5 回答 5

23
class Derived : public Base
{
  void func() {
      Base::func();   // Call the base method before doing our own.
      cout << "derived" << endl;
  } 
};
于 2012-04-16T16:17:40.067 回答
3

要从派生类访问基类函数,您可以简单地使用:

Base::func();

在您的情况下,您将把它作为派生实现的第一行func()

于 2012-04-16T16:17:30.373 回答
1

使用Base::func();是正确的,就像其他一些已经说过的那样。

请记住,基类的构造函数总是首先被调用,然后是派生类的构造函数。

于 2018-04-05T04:50:58.140 回答
0

你讲过构造函数,派生类的构造函数会调用基类的构造函数,不管你是否使用继承构造函数,这是有道理的,因为派生类应该能够构造从基类继承的成员。默认情况下,构造函数不会被继承。

但是,“正常”方法的方式大不相同。

首先,请确保在大多数情况下,派生类中的方法不必调用基类中的同名方法,相反,它会覆盖基类的方法,尽管它确实继承了它。

所以如果你真的想调用基类一,你应该明确告诉编译器。使用baseclass::somemethod将满足您的要求。

于 2018-04-05T03:41:50.773 回答
-4

你不能这样做。你必须这样做

 Void derived:: func()
 {
  this->func(); /*you should use 'this pointer' to 
  access the base class functions*/
  cout<<"derived";
  }
于 2018-04-05T03:06:47.213 回答