高手请看看,为什么在类的static函数中可以访问对象的private成员
高手请看看,为什么在类的static函数中可以访问对象的private成员,
同时,设置对象的private成员后,在对象中打印并不是那个设置值.
#include <iostream.h>
#include <stdio.h>
class pclass
{
private :
int a;
public:
pclass()
{
a =30;
printf("pclass init\n");
}
static void settest(pclass pc);
void printclass()
{
printf("%d\n",a);
}
};
void pclass::settest(pclass pc)
{
pc.a = 10;//此处怎么可以访问
printf("%d\n",pc.a);
}
void main()
{
pclass a;
a.settest(a);
a.printclass();//问什么不是上步设置的值
getchar();
}
问题点数:20、回复次数:16Top
1 楼I_Love_CPP(Never stop!)回复于 2006-07-04 21:13:35 得分 0
1,你仔细去看一下public,private访问权限的描述;
2,你传的是值,也就是说你那个函数访问的仅仅是那个对象的一个拷贝而不是其本身,
修改为:
static void settest(pclass& pc);//传引用Top
2 楼juping_chen(jack)回复于 2006-07-04 21:25:53 得分 0
谢谢!我是说pc.a = 10;此处怎么可以访问,a是私有函数,怎么可以用对象访问
Top
3 楼Helloooooo(每天,我都新的)回复于 2006-07-04 21:29:11 得分 0
因为他们都是自己人。Top
4 楼juping_chen(jack)回复于 2006-07-04 21:57:25 得分 0
函数中 pc保存在那里,起什么作用Top
5 楼Improving()回复于 2006-07-04 22:35:21 得分 0
类中的private成员变量只能在类的内部被访问,也就是说,只能在类的成员函数中进行访问。pc.a = 10;是写在void settest(pclass pc);中的,所以属于在成员函数中访问pc.a。所以可以编译通过。Top
6 楼ahao(天·狼·星星)回复于 2006-07-04 23:49:27 得分 0
private是对类来说的,不是对对象来说的。
只要是同一个类的,就可以访问其他对象的private成员
Top
7 楼al0n9(终于有四条内裤了)回复于 2006-07-05 09:58:50 得分 0
估计楼主想问的是静态成员函数为什么可以访问非静态的成员变量吧?
你这样试试
void pclass::settest(pclass pc)
{
this->a = pc.a;
std:cout<<"this->a"<<this->a<<"pc.a"<<pc.a<<std::endl;
}
这样应该是编译不过去的,对比一下你就能明白静态成员函数对静态成员变量的访问限制。Top
8 楼hhyytt(鹦鹉螺)回复于 2006-07-06 16:41:46 得分 0
只要是同一个类的,就可以访问其他对象的private成员
Top
9 楼navyblue1982(这家伙很懒)回复于 2006-07-06 20:18:15 得分 0
如果采用引用那么它的值就会改变
#include <iostream.h>
#include <stdio.h>
class pclass
{
private :
int a;
public:
pclass()
{
a =30;
printf("pclass init\n");
}
static void settest(pclass& pc);
void printclass()
{
printf("%d\n",a);
}
};
void pclass::settest(pclass& pc)
{
pc.a = 10;//此处怎么可以访问
printf("%d\n",pc.a);
}
void main()
{
pclass a;
a.settest(a);
a.printclass();//问什么不是上步设置的值
getchar();
}
这样试试看
Top
10 楼navyblue1982(这家伙很懒)回复于 2006-07-06 20:18:55 得分 0
你应该了解一个函数的调用过程
Top
11 楼powersuite(套套)回复于 2006-07-06 20:46:42 得分 0
传值和传地址的区别Top
12 楼chenxin0910(灰色诡计)回复于 2006-07-13 20:42:05 得分 0
传值只是原来的一个copy ,返回时就释放掉了.
类的对象当然可以访问它自己的私有成员啊!Top
13 楼cosety()回复于 2006-07-13 20:53:59 得分 0
1.对于类对象是可以访问本类的私有成员的
2.由于是传值,所以在settest结束后,作用域结束pc.a的值被释放.Top
14 楼THK007(QQ)回复于 2006-07-14 00:09:07 得分 0
静态成员函数它也是成员函数,私有成员变量就是有成员函数来访问的。没什么问题啊。Top
15 楼lythrum(lythrum)回复于 2007-03-07 15:56:55 得分 0
pc.a = 10
pc是pclass的一个对象。Top
16 楼taodm((不能收CSDN社区短信息,请莫浪费精力))回复于 2007-03-07 16:04:40 得分 0
就这么规定的呀。Top




