我有课Base
并想写一个类Derive
它仅继承了部分成员函数Base
。有什么方便的方法可以做到这一点吗?
例如,
class Base
{
...
void fooA();
void fooB();
...
}
我想定义一个class Derive
它继承了除fooB
from Base
.
当你从基类派生子类时,你继承了all来自基类的成员函数(构造函数和析构函数除外,它们永远不会被继承)。您无法挑选要派生的成员。
然而,这似乎是一个XY问题 https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem。取决于你是什么really尝试去做,你也许能够实现你的实际目标。
您可以更改派生方法的可见性:
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
};
你可以完全避免继承并且封装 http://en.wikipedia.org/wiki/Encapsulation_%28object-oriented_programming%29 Base
相反,并提供桥接法 http://en.wikipedia.org/wiki/Bridge_pattern对于资源在Base
您希望提供以下访问权限:
class Derived
{
Base mBase; // private
public:
void fooA() { mBase.fooA(); }
};
但是,请注意,在后两种情况下,您将失去多态性的一些好处。为了有一个Base*
指向实际上是一个的东西Derived
,您必须使用公共继承。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)