我试图理解私有继承的概念。
到目前为止,我到处都看到他们写道私有继承使派生类无法访问其成员。
这不是使它变得无用吗?如果我无法访问继承的类,那么首先派生的目的是什么?
现在,我知道私有类实际上已经使用并且很有帮助。我只是在理解方式上遇到了麻烦。
答案 0 :(得分:0)
确实很难获得私有继承,但是有时您确实希望类的用户无法访问基类的成员。
例如,我将Boost(www.boost.org)用于日期类,但我不希望将其暴露给日期类的用户,因为有一天我可能想将Boost转换为其他内容。
答案 1 :(得分:0)
您的问题看起来好像 [1] "SLIM SSD POWER ADAPTER" "8.4L 1ST 3.5 HDD POWER ADAPTER" "SATA POWER ADAPTER FOR ODD/2HDD"
[4] "SLIM SSD SATA&POWER ADAPTER" "SATA POWER ADAPTER FOR HDD" "2ND 3.5 HDD+SSD POWER ADAPTER"
[7] "SATA POWER ADAPTER" "1ND 3.5 HDD+SSD POWER ADAPTER" "DUAL NET CARD SATA POWER ADAPTER"
[10] "POWER ADAPTER (Others)"
个成员完全没有用。我的意思是,您最好问一下,如果无法从外部访问私有成员,那有什么用呢?但是,一个类(通常)比子类可以使用的更多。
考虑以下简单示例:
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
继承确实很有意义,因为它使用了它的功能。
请注意,私有继承实际上更接近于构成而不是公共继承,而上面的情况也可能是
foo
如何在C ++中访问私有继承的类成员?
在课程之外:您没有,这就是struct bar {
foo f;
void print_bar() {
std::cout << " blablabla \n";
print();
std::cout << " bblablabla \n";
}
};
的用途。通常,私有成员或私有方法没有什么不同,它们在那里是有原因的,您只是无法从外部访问它们。
答案 2 :(得分:0)
私有继承是一种建模“具有”关系的方法。建模的通常替代方法是合成,应尽可能使用它。当涉及一个类的受保护成员时,私有继承对于建模has-a关系很有用。
一种不同的框架方式是“我们想使用此类的实现,但忽略其接口”。
(我对此的经验是有限的,这是我从Scotty Meyers Effective C ++回忆起的,因为从来没有出现过我宁愿使用私有继承而不是合成的情况)