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