为什么这段代码有效?我的意思是value
是一个私有变量,为什么函数assign()
可以直接访问它?
class A {
private:
int value;
public:
A() :value(0){ }
void assign(A x)
{
value = x.value;
}
};
int main()
{
A a;
A b;
a.assign(b);
return 0;
}
答案 0 :(得分:4)
private
关键字表示类之外的代码无法访问该类。
同一个类的方法可以访问它,当然,如果他们不能没有人可以访问私有变量而且它们就没用了。
如果您担心从A
调用的方法访问B
的私人成员,请不要担心。
private
和public
的想法是让类的实现细节成为一个没人知道(并且需要知道)的东西,但是类本身。
类A
“知道”A
本身是如何实现的,因此“允许”使用它的内部结构 - private
,即使它们不是被调用对象。 / p>
答案 1 :(得分:2)
除了受保护的继承类成员之外,成员函数(例如,A :: assign(A))可以访问其各自类的私有成员。
答案 2 :(得分:2)
int value
为private
,但void assign(A x)
为public
。在main函数(A类外)中,您只能访问public
方法。在A类内部(例如在assign
方法中),您可以访问public
,private
和protected
成员
例如: 你不能写这样的东西:
A obj;
obj.value;
因为value
是私有的。
但您可以使用其他方法访问它:例如,您可以定义set(int val)
方法
class A {
private:
int value;
public:
A() :value(0){ }
void set(int val)
{
value = val;
}
void assign(A x)
{
value = x.value;
}
};
int main()
{
A obj;
obj.set(10);
}