Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我的对象不能访问它';s自己的私有成员变量?[C+;+;]_C++_Oop - Fatal编程技术网

C++ 为什么我的对象不能访问它';s自己的私有成员变量?[C+;+;]

C++ 为什么我的对象不能访问它';s自己的私有成员变量?[C+;+;],c++,oop,C++,Oop,我有一个名为classcar的类,它被实例化为对象car1。Car的一个成员变量是Car::width,但是当我尝试执行该行时 cout << car1.width << endl; cout私有成员可以通过它们所属的同一类的方法访问 汽车可以进入宽度。但在您的示例中,正是您试图访问width。这正是private的含义,它可以从成员函数内部访问,而不是像这里这样从外部访问。私有变量的全部目的是防止您正试图做的事情,即不允许类的用户使用成员变量。类Car上的方法可以访问

我有一个名为
classcar
的类,它被实例化为对象
car1
。Car的一个成员变量是
Car::width
,但是当我尝试执行该行时

cout << car1.width << endl;

cout私有成员可以通过它们所属的同一类的方法访问

汽车
可以进入
宽度
。但在您的示例中,正是试图访问
width
。这正是
private

的含义,它可以从成员函数内部访问,而不是像这里这样从外部访问。私有变量的全部目的是防止您正试图做的事情,即不允许类的用户使用成员变量。

类Car上的方法可以访问
width
成员,但您的代码(执行
cout
的代码)不能。

如果访问函数(
main
在这种情况下)不是您的类
Car
的成员或
friend
,那么编译器说
private
成员
width
在此上下文中是禁止的,这是正确的


想想看,如果任何人能够创造一辆
汽车
可以访问它的
私人
会员,隐私就没有多大意义了。将构造函数
设置为公共
以允许创建对象,但对此类用户隐藏已创建对象的数据成员以正确封装它们。您将类的
私有
内部操作限制为合法使用该类的
公共
受保护的
成员所允许的范围。

该语句在什么功能中?这就决定了访问是否是“通过对象”。除非main()是“Car”函数的名称,否则我不理解为什么您认为它试图访问width变量符合语句中的条件,“…私有成员可以通过它们所属类的对象访问。”这会产生误导
cout
与此无关。只有当前的函数定义才重要。如果该语句出现在
Car::print()
@aschelper中,则该语句是合法的:可能您错过了从
main()
执行此代码的部分?如果没有,则您是错的。你的回答声称,“这是不可能达到宽度的,”这显然是不正确的。也许这不是你的意思,但这是你说的。阿克菲勒纠正你是正确的,IMO方法在C++中是一个太模糊的术语。通常,“方法”是对象响应发送给它的“消息”所做的事情。在C语言中,您使用在表示对象的结构上操作的函数来实现“方法”。在C++中,可以重写运算符,使得消息“方法”通常是“成员函数”C++ C++术语,甚至C++ FAQ也会严重使用,例如:
cout << car1.width