我笨死,一个简单的问题。。。。。
#include <iostream.h>
class A
{
public:
A(int i){a=i;};
int c;
private:
int a;
};
void main()
{
cout<<sizeof(A)<<endl;
A x(8),y(9);
int A::*P ;
P = &A::c;
x.*P=3;
y.*P=4;
cout<<x.c<<endl;
cout<<y.c<<endl;
}
P的地址是?
怎么解决不同对象间c的值问题~!
问题点数:50、回复次数:10Top
1 楼qhfu(改个名字)回复于 2005-05-30 11:57:08 得分 0
p是指向A的成员的指针Top
2 楼wasoxi(我就是(没意思~~~))回复于 2005-05-30 12:06:00 得分 0
int A::*P ;
P = &A::c;
x.*P=3;
y.*P=4;//不懂你为什么要这样做的
直接:
x.c = 3;
y.c = 4; //这样不可以吗?Top
3 楼useresu(俗人)(灌水是我无言的抗议)回复于 2005-05-30 12:06:27 得分 0
什么意思?
不懂,
你想让不同对象c的值相同?
那用static int c;Top
4 楼dongpy(51-->ARM)回复于 2005-05-30 12:08:10 得分 0
P的地址是?
===============
P是指向类成员的指针变量,存放类成员的偏移。
它的地址是一个栈地址。Top
5 楼thuers(我什么都不会,所以我想多看看)回复于 2005-05-30 12:15:05 得分 0
我也刊布懂这程序
别人发给我的~!
Top
6 楼Cuiql(向前冲,向后看)回复于 2005-05-30 12:22:18 得分 0
P的地址是:类A中c的地址.Top
7 楼thuers(我什么都不会,所以我想多看看)回复于 2005-05-30 12:24:13 得分 0
可是一直是0000000Top
8 楼foochow(无聊,灌水......)回复于 2005-05-30 12:43:49 得分 50
指向数据成员的指针
尽管刚开始时,指向成员的指针的语法会使你有一点点的迷惑,但你不久会发现它其实同普通的指针差不多,只不过是*号的前面多了::符号和类的名字,例:定义一个指向int型的指针:
int * pi;
定义一个指向为int型的类的数据成员:
int A::*pmi; //pmi是指向类A的一个int型的成员
你可以这样初始化它:
class A
{
public:
int num;
int x;
};
int A::*pmi = & A::num;
上面的代码是声明一个指向类A的一个int型的num成员并将它初始化为这个num成员的地址.通过在pmi前面加上*你就可以使用和更改类A的num成员的值:
A a1, a2;
int n=a1.*pmi; //把a1.num赋值给n
a1.*pmi=5; // 把5赋值给a1.num
a2.*pmi=6; // 把6赋值给6a2.num
如果你定义了一个指向类A的指针,那么上面的操作你必须用 ->*操作符代替:
A * pa=new A;
int n=pa->*pmi;
pa->*pmi=5;Top
9 楼llf_hust()回复于 2005-05-30 12:48:25 得分 0
#include <iostream>
using namespace std;
class A
{
public:
A(int i){a=i;};
int c;
private:
int a;
};
void main()
{
cout<<sizeof(A)<<endl;
A x(8),y(9);
int A::*P ;
P = &A::c;
x.*P=3;
y.*P=4;
cout<<&x.c<<endl;
cout<<y.c<<endl;
cin.get();
}
/* 输出为:8
0012FED0
4
*/
Top
10 楼fengbaotiaorulei(风暴跳如雷)回复于 2005-05-30 14:17:47 得分 0
int A::*p;
这是定义了一个整型指针,加上A::限定了这个指针的作用域范围只能在A中,但他不属于这个类的成员,所以他无法访问类中的私有数据
也就是说指针p在这个类中和平常的指针一样,但出这个类它就变的不可见了,这个指针和类中的成员没有什么关系,把它放到类外面一样,放到外面只不过作用域大了而已Top




