我试图理解私有继承的概念。
到目前为止,我所看到的所有地方都写道,私有继承使得派生类无法访问其成员。
这不是让它有点没用吗?如果我无法访问继承的类,那么首先派生的目的是什么?
现在我知道私人课程实际上是有用的并且很有帮助。我只是很难理解如何。
我试图理解私有继承的概念。
到目前为止,我所看到的所有地方都写道,私有继承使得派生类无法访问其成员。
这不是让它有点没用吗?如果我无法访问继承的类,那么首先派生的目的是什么?
现在我知道私人课程实际上是有用的并且很有帮助。我只是很难理解如何。
您的问题看起来好像private
成员完全没用。我的意思是你也可以问,如果不能从外部访问私有成员有什么好处。然而,一个类(通常)比一个子类可以使用的要多。
考虑这个简单的例子:
struct foo {
void print();
};
struct bar : private foo {
void print_bar() {
std::cout << " blablabla \n";
print();
std::cout << " bblablabla \n";
}
};
继承自的类bar
甚至不会注意到bar
继承自foo
. bar
尽管如此,继承 from确实有意义foo
,因为它使用了它的功能。
请注意,私有继承实际上更接近于组合而不是公共继承,上面也可以是
struct bar {
foo f;
void print_bar() {
std::cout << " blablabla \n";
print();
std::cout << " bblablabla \n";
}
};
如何在 C++ 中访问私有继承的类成员?
课外:你不知道,这就是private
目的。一般来说,私有成员或私有方法并没有什么不同,它们的存在是有原因的,你只是不能从外部访问它们。
私有继承是一种建模 has-a 关系的方法。对此建模的常用替代方法是组合,应尽可能使用组合。当涉及到类的受保护成员时,私有继承对于对 has-a 关系建模很有用。
一种不同的框架方式是“我们想使用这个类的实现,但忽略它的接口”。
(我在这方面的经验是有限的,这是我从 Scotty Meyers Effective C++ 中回忆的,因为从来没有出现过我更喜欢私有继承而不是组合的情况)
确实很少需要私有继承,但有时您确实希望您的类的用户无法访问基类的成员。
例如,我将 Boost (www.boost.org) 用于我的日期类,但我不希望它暴露给我的日期类的用户,因为有一天我可能想将 Boost 换成别的东西。