继承:选择要继承的基类方法

时间:2014-01-08 14:02:53

标签: c++ derived-class

我有一个类Base,想要编写一个类Derive,它只继承Base中的一些成员函数。有没有方便的方法呢?

例如,

class Base
{
   ...
   void fooA();
   void fooB();
   ...
}

我希望定义一个class Derive,继承fooB之外的所有成员,Base除外。

3 个答案:

答案 0 :(得分:3)

从基类派生子类时,从基类继承所有成员函数(构造函数和析构函数除外,它们从不继承)。您无法挑选和选择要派生的成员。

然而,这似乎是XY Problem。根据您 尝试做的事情,您可以实现自己的目标。

您可以更改派生方法的可见性:

class Derived : public Base
{
private: 
  using Base::fooB; // fooB() is now private
};

您可以使用私有继承,然后仅公开您希望提供的方法:

class Derived : private Base
{
public:
  using Base::fooA;  // Only fooA() is public here
};

您可以完全避免继承,而encapsulate Base可以避免继承,并为您希望提供访问权限的Base中的资源提供bridge methods

class Derived 
{
Base mBase; // private
public:
  void fooA() { mBase.fooA(); }
};

然而,请注意,在后两种情况下,您会失去一些多态性的好处。为了Base*指向实际为Derived的内容,您必须使用公共继承。

答案 1 :(得分:0)

如果我是对的,那么你所看到的就是继承。这意味着如果A继承B,它会继承B的方法和属性,只有它们被清除保护或公开。

检查以下链接:

  1. http://www.cplusplus.com/doc/tutorial/inheritance/
  2. http://www.youtube.com/watch?v=gq2Igdc-OSI

答案 2 :(得分:0)

你可以使fooB私有,它在派生类中是不可见的。 了解私有/受保护/公共修饰符以及公共/私有/受保护的继承。这些是你需要的工具。