如何在 C++ 中访问私有继承的 class 成员?
How do I access privately inherited class members in C++?
我正在尝试理解私有继承的概念。
到目前为止,我到处都看到他们写道,私有继承使其成员无法从派生 class.
这不是有点没用了吗?如果我无法访问继承的class,那么首先派生的目的是什么?
现在我知道私有 classes 确实有用而且有用。我只是无法理解如何做。
确实很少需要私有继承,但有时您确实希望 class 的用户无法访问基础 class 的成员。
例如,我将 Boost (www.boost.org) 用于我的约会 class,但我不希望它暴露给我约会 class 的用户,因为有一天我可能想要换掉 Boost 以换取其他东西。
你的问题看起来好像 private
成员完全没有用。我的意思是你也可以问,如果不能从外部访问私有成员,它有什么用。但是,class(通常)比 subclass 可以使用的更多。
考虑这个简单的例子:
struct foo {
void print();
};
struct bar : private foo {
void print_bar() {
std::cout << " blablabla \n";
print();
std::cout << " bblablabla \n";
}
};
A class 继承自 bar
甚至不会注意到 bar
继承自 foo
。尽管如此,bar
继承自 foo
确实有意义,因为它使用了它的功能。
注意私有继承其实更接近组合而不是public继承,上面也可以是
struct bar {
foo f;
void print_bar() {
std::cout << " blablabla \n";
print();
std::cout << " bblablabla \n";
}
};
How do I access privately inherited class members in C++?
class 之外:你不知道,这就是 private
的用途。一般而言,私有成员或私有方法并没有什么不同,它们存在是有原因的,您只是无法从外部访问它们。
私有继承是一种模拟拥有关系的方式。对此建模的通常替代方法是组合,应尽可能使用它。当涉及 class 的受保护成员时,私有继承可用于建模 has-a 关系。
另一种构图方式是"we want to use the implementation of this class, but ignore its interface"。
(我对此的经验有限,这是我从 Scotty Meyers Effective C++ 中回忆起的,因为从来没有出现过我更喜欢私有继承而不是组合的情况)
我正在尝试理解私有继承的概念。
到目前为止,我到处都看到他们写道,私有继承使其成员无法从派生 class.
这不是有点没用了吗?如果我无法访问继承的class,那么首先派生的目的是什么?
现在我知道私有 classes 确实有用而且有用。我只是无法理解如何做。
确实很少需要私有继承,但有时您确实希望 class 的用户无法访问基础 class 的成员。
例如,我将 Boost (www.boost.org) 用于我的约会 class,但我不希望它暴露给我约会 class 的用户,因为有一天我可能想要换掉 Boost 以换取其他东西。
你的问题看起来好像 private
成员完全没有用。我的意思是你也可以问,如果不能从外部访问私有成员,它有什么用。但是,class(通常)比 subclass 可以使用的更多。
考虑这个简单的例子:
struct foo {
void print();
};
struct bar : private foo {
void print_bar() {
std::cout << " blablabla \n";
print();
std::cout << " bblablabla \n";
}
};
A class 继承自 bar
甚至不会注意到 bar
继承自 foo
。尽管如此,bar
继承自 foo
确实有意义,因为它使用了它的功能。
注意私有继承其实更接近组合而不是public继承,上面也可以是
struct bar {
foo f;
void print_bar() {
std::cout << " blablabla \n";
print();
std::cout << " bblablabla \n";
}
};
How do I access privately inherited class members in C++?
class 之外:你不知道,这就是 private
的用途。一般而言,私有成员或私有方法并没有什么不同,它们存在是有原因的,您只是无法从外部访问它们。
私有继承是一种模拟拥有关系的方式。对此建模的通常替代方法是组合,应尽可能使用它。当涉及 class 的受保护成员时,私有继承可用于建模 has-a 关系。
另一种构图方式是"we want to use the implementation of this class, but ignore its interface"。
(我对此的经验有限,这是我从 Scotty Meyers Effective C++ 中回忆起的,因为从来没有出现过我更喜欢私有继承而不是组合的情况)