我有一个类Base
,想要编写一个类Derive
,它只继承Base
中的一些成员函数。有没有方便的方法呢?
例如,
class Base
{
...
void fooA();
void fooB();
...
}
我希望定义一个class Derive
,继承fooB
之外的所有成员,Base
除外。
答案 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的方法和属性,只有它们被清除保护或公开。
检查以下链接:
答案 2 :(得分:0)
你可以使fooB私有,它在派生类中是不可见的。 了解私有/受保护/公共修饰符以及公共/私有/受保护的继承。这些是你需要的工具。