请教C++中对类的私有成员的访问

来源:百度知道 编辑:UC知道 时间:2024/05/13 02:24:02
#include <iostream>

using std::cout;
using std::endl;

class X
{
private:
int x;
public:
X(int n = 0)
{
x = n;
}
int plus(X c)
{
int n = x + c.x;
cout<<c.x<<endl; //Right?
return n;
}
};

int _tmain(int argc, _TCHAR* argv[])
{
X y(5);
//cout<<y.x<<endl; Error
cout<<y.plus(y)<<endl;
return 0;
}
如上程序所示,小弟写了一个简单的类X,一个私有成员x,一个构造函数,一个成员函数plus,为何既然在外部用定义的对象直接访问类的私有成员是错误的无法编译,为何写到类的成员函数里就可以直接访问并使用了呢?
程序是用Visual Studio 2005里自动生成的win32控制台程序写的,漏加了#include "stdafx.h"。。。
请C++高手帮忙!!!
对一楼的回答:不是啊,我知道类的成员函数能访问类的私有成员,但是这个程序里的是用对象直接访问的私有成员啊,并没通过成员函数,请高手说详细一点,小弟愚钝,不胜感激。

这是在成员函数定义体内部调用对象的数据成员,是可以被编译器识别并允许的。
就像楼上说的,成员函数都不能调用,那哪里还能访问类的私有成员啊。

下面那一楼都给你解答的很明白了,你在外面直接定义对象后,无法访问类的私有成员,你那不也给屏蔽了么,你调用的那函数是类里的函数,在类里都声明了,在类中声明的函数可以随便调用私有成员,再不明白,无法回答你了cout<<y.plus(y)<<endl;,这不就是用对象调用类中的函数么,只要私有成员在被声明过的函数里面,就可以随意显示

//cout<<y.x<<endl; 这里是不合法的引用,你重新编译下文件。或者用g++编译

对于私有成员的使用,C++认为外部对像是无法方问,就是在内存中存放的位置并不是在一起.
当对成员函数的使用时,因为在声明时就继承了私有成员,这样私有成员就相当于一个函数体内定义的,函数体内的定义的非公有成员在函数体结束时则被释放。而你在函数体外调用一个函数体内的定义的一个变量那是不可能,会出错!
这里的类成员也有相似之处。
因为C++可以两个不同的类内使用相同的变量名!这样就大的节省了名字复杂度、若是外部对像可以调用一个私有成员变量那么,我们就不用写程序了,那就想好怎么取名字吧!因他要整个程序唯一,对于一个大项目,不同的组,是很难做到这一点的!

C++类的私有成员和受保护乘员只能有类的成员函数调用或者修改。如果类外部需要使用这个乘员的值,那么需要类提供一个公有的函数。这个函数就是通常说的类的接口。

//cout<<y.x<<endl; Error
你错误的这一步是用对象直接访问的私有成员,所以错了,但cout<<y.plus(y)<<endl;
是通过类的公共成员函数访问私有成员的,这是合法的,另外
int plus(X c)
{
int n = x + c.x;
cout<<c.x<<endl; //Right?
return n;
}
觉得写成
int plus()