读取私有变量 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 的友元函数。
如果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_;
};
仅授予读取权限,但授予所有客户端。
我是 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 的友元函数。
如果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_;
};
仅授予读取权限,但授予所有客户端。