读取私有变量 class 个成员

Read private variables class members

我是 c++ 的新手,我需要在另一个 class 的方法中读取 class 的私有 class 成员,例如:

class a{
private:
int x;

}

class b{
void foo();
}

void b::foo(){
//here I want to read from x that's in a
}

我是否必须在 class a 中设置函数,例如 int readx(){return x);)a readclass(){return *this);}?还有别的办法吗?

您可以使用 friend class 或函数,但使用方法的私有成员不是一个好主意(测试只是合理的借口)。如果无法避免使用私有成员,最好使用 public 方法或重新设计代码。

你可以实现一个可以访问 foo 中的 x 的友元函数。

Reference

如果classa中没有这个数据成员的访问器那么你应该将classb的成员函数声明为classa的友元函数。

例如

#include <iostream>

class B
{
public:    
    void foo() const;
};

class A
{
public:
    A( int x ) : x( x ){}
private:    
    friend void B::foo() const;
    int x;
};

void B::foo() const
{
    A a { 10 };
    std::cout << a.x << std::endl;
}

int main()
{
    B().foo();

    return 0;
}

class 的私有部分具有 'hiding' 的 objective 处理数据的方式,提供了一种使用 public 方法访问所述数据的简化方式. 使用 public 方法更改私有成员值的优点是,例如,您可以为 'x'.

允许值仅介于 0 和 10 之间

在你的情况下,你应该考虑 'x' 在你的第一个 class 中代表什么,如果第二个 class 直接访问它并且没有任何意义控制或特殊考虑。如果是这种情况,它可能应该是一个 public 值。在另一种情况下,您需要创建一个 public 方法来读取它,就像您的 readx 示例一样。 如果只有'b'有权限直接访问'x',你也可以定义一个友元函数,就像有人说的那样。

请注意,返回指向实例的指针不允许访问 class 的私有成员。

声明一个 friend 函数或 class 将授予该函数或 class 对 a 的 x 的读写访问权限,a

class a {
public:
   const int& readx() const { return x; }
private:
   int x 
};

或者,如果你更喜欢这种语义

class a {
public:
   const int& x() const { return x_; }
private:
   int x_; 
};

仅授予读取权限,但授予所有客户端。