C++ 为什么这个代码能工作?我的意思是会员是私人的
为什么这个代码能工作?我的意思是C++ 为什么这个代码能工作?我的意思是会员是私人的,c++,C++,为什么这个代码能工作?我的意思是值是一个私有变量,为什么函数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; } 成员函数(例如A::ass
值
是一个私有变量,为什么函数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;
}
成员函数(例如A::assign(A))可以访问其各自类的私有成员,以及继承类的受保护成员。关键字
private
表示类外的任何代码都不能访问该类
当然,同一类的方法可以访问它,因为如果它们不能访问私有变量,那么就没有人可以访问私有变量,它们也就没有用了
如果您担心从A
调用的方法访问B
的私有成员,请不要担心。private
和public
的思想使得类的实现细节除了类本身之外,没有人知道(并且需要知道)。类
A
知道A
本身是如何实现的,因此“允许”使用它的内部构件-private
s,即使它们不是被调用的对象。int value
是private
,但是void assign(A x)
是public
。在main function(A类之外)中,您只能访问public
方法。在类A内部(例如在assign
方法中),您可以访问public
、private
和protected
成员
例如:
你不能写这样的东西:
A obj;
obj.value;
因为值
是私有的。
但您可以使用其他方法访问它:例如,您可以定义set(int-val)
method
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);
}
类方法可以访问自己类的私有成员。Private只是意味着不能从类外直接访问它。如果private的意思是“这不能被任何人使用”,那就没用了。你的入门书/课程/教程肯定解释了访问修饰符。通过最近的编辑,问题的这一方面现在已经很清楚了。在问题达到预期的改进后,我删除了相应的评论,为了不让任何人感到困惑,既然问题已经由OP编辑。