读取私有变量类成员

时间:2015-11-06 11:31:32

标签: c++ class c++11 private

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

class a{
private:
int x;

}

class b{
void foo();
}

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

我是否必须在class aint readx(){return x);) a readclass(){return *this);}中设置功能?还有另一种方式吗?

5 个答案:

答案 0 :(得分:3)

类的私有部分的目标是“隐藏”处理数据的方式,提供使用公共方法访问所述数据的简化方法。 使用公共方法更改私有成员值的优点是,例如,您可以为“x”仅允许0到10之间的值。

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

Reference

答案 3 :(得分:1)

如果类a中没有此数据成员的访问者,则应将类b的成员函数声明为类a的友元函数。

例如

#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;
}

答案 4 :(得分:1)

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

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

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

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

仅授予读取访问权限,但授予每个客户端。