在没有朋友c++的情况下访问其他类的私有数据
Access private data to other class without friend c++
您好,我需要访问从DataContainer到Derived by基类的数据。我不能仅仅公开这些数据,因为我在不应该访问的地方使用了这个类。
我可以只使用friend,但我必须为基类中的派生类创建访问器。这将使其无法延伸。
#include <vector>
class Data; // It's not important
class DataContainer
{
protected:
std::vector<Data> dataVector;
std::vector<Data> dataVector2;
};
class Base
{
protected:
DataContainer* dataContainer;
public:
virtual ~Base() {};
void SetDataContainer(DataContainer* dataContainer)
{
this->dataContainer = dataContainer;
}
virtual void UseDataFromVector() = 0;
};
class Derived:public Base
{
public:
virtual ~Derived() {};
virtual void UseDataFromVector()
{
//And here want to use data from DataContainer...
}
};
我的问题是如何访问这些数据而不公开或成为朋友。
更新
这个答案对我没有帮助,因为朋友并没有伤害我。我只是尽量避免用聪明的方式写代码。我可以写这样的东西:
class DataContainer
{
friend class Base
std::vector<Data> dataVector;
};
class Base
{
DataContainer* dataContainer;
std::vector<Data>& GetDataVector() { return dataContainer->dataVector;}
};
但是当我在DataContainer中添加更多向量时,我将不得不更新这个类。
我在测试代码中见过的最糟糕的黑客攻击是这样的:
#define private public
#include "the_class_i_want_to_hack.h"
// test case goes here, with instantiation of the hacked class and so on...
我显然不推荐它…
如果你知道数据容器的结构,你可能会滥用指针和指针算法
对于您的DataContainer,这将起作用:
virtual void UseDataFromVector()
{
std::vector<Data>* pFirstDataContainer = reinterpret_cast<std::vector<Data>*>(dataContainer);
pFirstDataContainer->emplace_back();
pFirstDataContainer->size();
std::vector<Data>* pSecondDataContainer = ++pFirstDataContainer;
pSecondDataContainer->emplace_back();
pSecondDataContainer->size();
}
相关文章:
- QCombobox,字符串旁边有项目的其他数据
- 如何对 int 变量应用验证,使其仅接受整数数据,并且在任何其他数据的情况下不会出错?
- GLSL 计算着色器 使用查找表设置缓冲区会导致不写入任何数据,与其他数据设置相同的缓冲区有效
- 如何将模运算符与其他数据类型一起使用
- 将指针与其他数据相关联
- 为什么数据中的随机部分替换了曾经存储在我的角色数组中的其他数据
- 如何仅接受整数并忽略其他数据类型
- 编译器是否有可能检测整数溢出或其他数据类型溢出的可能性
- 协议缓冲区、Apache Thrift或任何其他数据结构序列化协议中的递归数据结构
- 其他数据以及 TCP 连接请求
- 如何在不覆盖其他数据的情况下编辑文件中的数据
- C++11;非静态数据成员初始化是否可以访问其他数据成员
- 如何将其他数据成员"number"添加到帐户类?
- 如何正确地将std::函数用于其他数据类型(在优先级队列中)
- std::vector或其他数据结构中不同类型的对象
- GCC编译器是否可以处理比long / long / int更大的其他数据类型?
- 将curl结果中的字节组解释为其他数据类型的方法
- 为什么指向 char 的指针与其他数据类型的指针相比行为不同
- 树或其他数据结构对查找"recent searches"最有效
- 类函数更改类cpp中的其他数据