首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使C++类以const方式访问其他类的所有私有成员(只读而不写)

如何使C++类以const方式访问其他类的所有私有成员(只读而不写)
EN

Stack Overflow用户
提问于 2014-08-30 13:26:09
回答 2查看 299关注 0票数 0

我正在制作一个游戏,其中我有一个级别类,负责将所有对象存储在向量中并对它们进行更改。

我还有一个叫做Engine.h的类,它有静态函数,它根据向量级别来计算事物,但是不改变它们中的任何东西。Level调用引擎函数并根据返回的内容执行操作。

但是由于引擎需要查看这个级别所拥有的向量,所以我不得不向每个引擎函数传递一串向量指针(const),以便它能够根据向量的当前状态进行计算。

是否有任何方法使引擎只访问所有级别的成员变量,但不能编辑其中任何一个。某种“康斯特朋友”?

我刚刚意识到有一个对象级别。因此,我还需要有一种方法,为引擎指定一个特定的对象级别,它可以是一个“const朋友”。也许这事太复杂了。如果没有解决方案,那么将许多成员变量传递给引擎函数是不好的做法,还是这样做的。如何传递一个指向级别的指针,即const (这会使所有级别成员变量也成为const吗?)

EN

回答 2

Stack Overflow用户

发布于 2014-08-30 13:32:31

假设您有一些类Foo,其中有一个要访问的成员变量x。可以使const函数按值访问成员变量。因为它们是const,所以它们可能不会修改任何成员变量。

代码语言:javascript
复制
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。也许在某些函数中,它需要访问x变量的Foo,您可以使用getter。

代码语言:javascript
复制
class Bar
{
    void doStuff (Foo a)
    {
        int answer = a.getX();
        std::cout << answer << std::endl;
    }
};

现在我们可以看一个快速的演示。我们创建了一个Foo实例和一个Bar实例。然后我们可以为x设置Foo值,并从BardoStuff函数中访问它。

代码语言:javascript
复制
int main()
{
    Bar myBar;
    Foo myFoo;

    myFoo.setX(5);

    myBar.doStuff(myFoo);  // will output 5

    return 0;   
}
票数 1
EN

Stack Overflow用户

发布于 2014-08-30 14:01:52

如果有帮助的话,你可以做这样的事情:

代码语言:javascript
复制
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
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25582844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档