访问类中的内部数据结构的最佳方式是什么?
What's the best way to access the internal data structure within a class?
我有一个由一堆内部数据结构(例如m_data)和一些对象(例如ClassB)组成的类a:
class A
{
public:
...
private:
int m_data[255];
ClassB B[5];
}
B访问m_data的最佳方式是什么?我不想把m_data传递给B的函数..
//更新:非常感谢你的回复。让我提供更多的背景信息。我正在研究一个人工智能项目,在那里我得到了一些数据(例如m_data[I])在每个时间步骤。类A需要缓冲这些信息(m_data),并使用B的列表(示例更新)来进行推断。类B本身实际上是一个基类,不同的子类出于不同的目的从它派生,所以我想在这种情况下,使B成为a的子类可能不干净(?).
friend class ClassB;
如果你想让ClassB访问A的所有受保护成员和私有成员,就把这行放在A声明的任何地方。
其中之一
- 让b类成为a类的朋友
- 使A成为类b的子类,并使m_data
protected
而不是private
[回应Mark B的评论]
如果你觉得需要求助于friend
关系,设计应该重新考虑-它可能不合适。子类化可能有意义,也可能没有意义;你必须问自己:"class A
和有点 class ClassB
吗?"如果这个问题在直觉上没有意义,或者答案只是没有,那么它可能是一个不合适的解决方案。
理想情况下,根本不允许外部访问数据结构。您应该重新考虑您的方法,更多地考虑"类b访问A实例所需的功能需求/用例是什么"的问题,而不是将内部成员的管理卸载到class A
中未管理的方法。你会发现,将内部成员的管理限制在拥有这些成员的类上,将产生更清晰的代码,更容易调试。
但是,如果由于某些原因这对您的情况不实际,那么您可以想到以下几种可能性:
- 您可以提供简单的get/set访问方法,这取决于您的需求,可用于访问的副本或m_data的引用。这样做的缺点是允许每个人访问,但只能通过定义良好的接口来实现
- ggPeti提到使用friend,这可能对您有用,但它使ClassB访问a的所有内部。
返回m_data的getData()函数。使用setData()来修改值
因此,在类B的函数中,您将创建一个指向您创建的类类型a变量的指针。我们就称这个指针为'p'。只要执行p->getData(), p.getData()可能就是答案。我认为它们做同样的事情,但c++使用'->',而其他一些语言使用'.'。不过别引用我的话。
祝你好运,先生。希望我能帮到你。
B访问m_data的最佳方式是什么?
取决于用途。
我要这样做:
class ClassB
{
// ...
void foo( A &a )
{
// use a's data
}
};
class A
{
//...
int m_data[255];
ClassB & B;
};
根据实现,可能根本不需要ClassB。也许它的方法可以转换成函数
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 在reactor中存储eventHandlers的最佳方式是什么
- 引用 std::any 或 not_yet_in_std::whatever 的惯用方式是什么?
- 在C++中,建议通过数组循环的方式是什么?
- DLL共享数据的推荐方式是什么
- 等待线程的最佳方式是什么
- 将uint8_t*buffer和size_tbufferlen从C++传递到C中的API函数的最佳方式是什么
- 只显示片段着色器的最佳方式是什么
- 复制文件的最佳方式是什么,以便我可以在复制过程中轻松取消复制?
- 在 c++ 中打印到控制台的最佳方式是什么?
- 在Qt Creator中应用代码更改的快捷方式是什么?
- 在C 中超负荷构造函数的合适方式是什么
- 执行随机开关函数的QT方式是什么连续两次使用相同情况的方法
- 在某些代码中覆盖方法的方式是什么?
- 为单个函数同时声明多个变量的最佳方式是什么
- Qt中数据类(模型)和视图/控制器类之间的数据通信的正确方式是什么
- 在c++中存储一个对象或不存储对象的首选方式是什么
- 在C 项目中包含库的不同方式是什么?
- 解释"Bit String"的最佳方式是什么
- 计算差异数据并通过网络发送的最佳方式是什么