[英]How to make a class able to access only certain private members of another class?
[英]How to make C++ class access ALL of another class's private members in a const way (only read not write)
我正在制作一个游戏,其中有一个Level类,该类负责将所有对象存储在矢量中并进行更改。
我还有一个名为Engine.h的类,该类具有静态函数,这些函数根据Level拥有的向量来计算事物,但不改变它们中的任何内容。 Level调用Engine函数并根据返回的内容进行操作。
但是由于Engine需要查看Level拥有的向量,因此我被迫向每个Engine函数传递一堆向量指针(const),以便它可以基于向量的当前状态进行计算。
有什么方法可以使Engine只能访问Level的所有成员变量,而不能对其进行任何编辑。 某种“常量朋友”?
我只是意识到有一个对象级别。 因此,我还需要一种方法为Engine分配一个特定的Level对象,使其可以成为“常量朋友”。 也许这变得复杂了。 如果没有解决方案,那么将大量成员变量传递给Engine函数是否是错误的做法,或者这是如何实现的。 传递指向const的Level的指针会怎么样(会使所有Levels成员变量也变为const)?
假设您有一些Foo
类,该类具有要访问的成员变量x
。 您可以使const
函数按值访问成员变量。 由于它们是const
,因此它们不能修改任何成员变量。
class Foo
{
public:
Foo() : x{0} {} // constructor
int getX() const { return x; } // this is a "getter"
void setX(int value) { x = value; } // this is a "setter"
private:
int x;
};
然后,您可以拥有其他班级Bar
。 也许在某些功能中它需要访问Foo
x
变量,您可以使用getter。
class Bar
{
void doStuff (Foo a)
{
int answer = a.getX();
std::cout << answer << std::endl;
}
};
现在我们可以看一个快速演示。 我们创建一个Foo
实例和一个Bar
实例。 然后,我们可以为Foo
设置x
值,并从Bar
的doStuff
函数访问它。
int main()
{
Bar myBar;
Foo myFoo;
myFoo.setX(5);
myBar.doStuff(myFoo); // will output 5
return 0;
}
如果有帮助,您可以执行以下操作:
class Level
{
private:
std::vector<float> stuff;
public:
// give outsiders const access
const std::vector<float>& const_stuff = stuff; // c++11 else use ctor
const std::vector<float>& get_stuff() const { return stuff; } // more idiomatic
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.