c++ - "unprivate"是 C++ 继承中的一个元素吗?不行怎么办?

标签 c++ oop inheritance

如果我想继承“BaseClass”但我必须管理其中一个私有(private)成员,我可以用这样的东西“取消私有(private)”吗?:

using BaseClass::private_member;

如果不是,当某些成员未按应有的方式标记为 protected 时该怎么办?如果不可能,那意味着我们不应该继承我们没有开发的类?

最佳答案

If i want to inherit from "BaseClass" but i have to manage one of the private members, can i "unprivate" it with something like this?

没有。私有(private)成员不能由派生类管理。如果你认为你必须管理一个基类的私有(private)成员,那么某人的设计或实现是错误的。它可能是有缺陷的基类,但要保持开放的心态——一定要考虑缺陷存在于您的设计中的可能性。 (更好的是,假设缺陷可能存在于您的设计中,直到证明并非如此。)

If not, what to do when some of the members are NOT marked as protected as it should be?

首先,验证这个假设。该成员应该被标记为 protected ,还是您试图滥用基类? 如果成员确实应该被标记为 protected ,那么要做的就是修复基类。如果基类不受您的控制,请提交错误报告。

If is not possible, that means we are not supposed to inherit from classes that we did not develop?

不,这意味着您不应该建立在有缺陷的基础之上。 (或者这可能意味着您应该使用基类设计而不是反对它。)那里有很多实现良好的基类。为手头的工作使用正确的工具。

关于c++ - "unprivate"是 C++ 继承中的一个元素吗?不行怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58461214/

相关文章:

c++ - 超出内存限制或时间限制

C++如何将字符串的长度转换为整数

javascript - Coffeescript 中的类和继承

c++ - 继承自 std::string

C++函数的继承,传入参数

c++ - 为什么 DrawThemeText 不能正常工作?

c++ - 从 void* 到基类指针的转换

java - 类实例化实例,静态是类特定的,那么为什么实例不共享静态属性?

python - 如何将一个 Python 对象的所有属性复制到另一个对象?

java - 如何使用继承和构造函数使用 1 个具有 2 个不同大小的数组