我有点困惑..我的代码在下面
#include <iostream>
using namespace std;
class Test {
private:
int x, y;
public:
void get(){
cin>>x;
cin >>y;
cout << x;
cout << y;
}
};
int main ()
{
Test obj;
obj.get();
return 0;
}
在此代码中,我使用cin访问私人成员.. !!好吗?因为我认为用户可以在程序运行后直接发送值或访问私有成员.. !! 我只是想问一下它是否安全.. !!感谢.. !!
答案 0 :(得分:4)
阅读有关C ++成员访问者的更多信息。
私人成员只能在定义它们的类中访问。 get()
函数属于Test
类,因此可以访问私有成员。
答案 1 :(得分:1)
人们已经回答了,但我想给出一个完整的答案:
In this code I'm accessing private members using cin..!! Is it fine?
在代码中,您将从cin
获取值并将其存储在成员变量中。这是允许的,但不是编写代码的常规方法。正如其他人所说的那样,每个Test
对象都可以访问自己的内部,并且正如所写,它将使用来自cin
的数据更新这些内部。很难想象一种有用的语言会妨碍你这样做。
I think user can send values or access private members directly after program run..!!
不,用户不能。程序退出后,内存被释放,所有值都不再存在。
即使程序正在运行,用户也无法访问对象的内部。是的,你向用户询问价值,然后立即告诉用户他们给你的价值,所以没有秘密;但是,用户无法无限制地访问x
和y
。将x
设置为5
后,如果该程序从未再次调用10
,则用户无法将其更改为get()
。您可以阅读源代码,并标记允许值更改的每个位置;没有你打电话get()
,它永远不会神秘地改变。一个真正的安全漏洞将使价值在您不知情的情况下发生变化。
答案 2 :(得分:0)
在一个类中,private控制名称的可访问性,而不是实际数据。因此,允许类成员函数将对私有成员的引用传递给任何其他函数。
该行
cin >> x;
实际上是对此函数的调用
std::istream& std::istream::operator>>(int&)
get()
(成员函数)中的代码可以看到变量x
的名称,因此可以形成对它的引用,然后将其传递给operator>>()
。就operator>>()
中的代码而言,它可以是任何地方的任何int的引用。