为什么这段代码有效?我的意思是会员是私人的
Why this code is working ? I mean the member is private
为什么这段代码有效?我的意思是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;
}
private
关键字表示类外的任何代码都无法访问该类。
当然,同一类的方法可以访问它,因为如果它们不能,没有人可以访问私有变量,它们将毫无用处。
如果您担心从调用A
的方法访问B
的私有成员,请不要担心。private
和public
的想法是使类的实现细节成为没有人知道(并且需要知道)的事情,而是类本身。
类A
"知道"A
本身是如何实现的,因此"允许"使用它的内部结构 - private
s,即使它们不属于被调用的对象。
成员函数(例如,A::assign(A))可以访问其各自类的私有成员,以及继承类的受保护成员。
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);
}
相关文章:
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 代码在 CodeSignal 中工作不正确。不确定这是否是我的代码缺陷
- Qt GUI使用Qfiledialogbox和qlabel显示视频,这是我的代码
- 这是我的 .h 文件的一些错误,当我在其中包含我的类模板时,它显示 [错误] 未终止 #ifndef
- 合成错误不知道为什么会发生这种情况,请检查一下并告诉我这是我的编码还是视觉工作室
- 这是我的程序,C++使用 OpenCv 库从数据集中读取图像序列,但它没有运行
- C OPENCV中的错误是我的第一个代码(中值过滤器)
- 是我的等待 - 使用std :: mutex通知机制正确
- "... .exe hast stopped working"只发生在我朋友的电脑上,而不是我的电脑上
- 如果类外是我的朋友,类外::内也是
- f_close错误(写入SD卡是我的最终项目)
- 使用JNI从Java调用本机(C++)函数时发生访问冲突:这是我的代码问题,还是已知问题
- 我正在收到错误的“ list :: ShowList”:功能风格的初始化器似乎是我的CPP文件中的函数定义'
- 仍然是我的Vector版本
- std::priority_queue的最小堆是我的瓶颈
- 我一直收到一个错误,这是我第一次使用类,下面是我的代码:
- 这是我的代码,它正在返回Process返回的255(0xff)码块
- 为什么是我的AVL树删除功能不平衡
- 简单的Thrust代码的执行速度大约是我的cuda内核的一半.我用Thrust错了吗
- 将链接哈希表初始化为 NULL。获取"lvalue required as left operand of assignment"错误。为什么?这是我的代码: