鱼缸换气泵怎么使用:关于C++中成员指针的问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/04 12:14:27
关于成员指针的说法不正确的是()
A,成员指针与指向对象的指针是一回事
B,成员指针不是类中的成员,因此要在类外进行说明
C,成员指针只能指向公有成员
D,成员指针只能指向与数据类型相符的成员

注:参考答案是D
现在成员指针是什么,我还没理解得了,明天就考C++二级了,请高手指教!谢谢

楼主的题是否有错误?"不正确"的不可能是D呀.明明ABC都是错误的.
成员指针的意思就是"指向某个类中的某种类型的成员的指针"
例如
class A
{
int x;
int y;
char c;
}

int A::*pam;
那么pam就是指向类A中的int类型成员的指针,他可以指向x,y但不可以指向c
另外,一个类对象的所有数据成员在内存中是一块连续的空间,所以,成员指针其实代表的就是一个偏移量,表示从这个类最开始的内存空间向后偏移多少才会到达目标内存地址.所以,成员指针跟指向对象的指针是完全2回事,指向对象的指针就是一个地址而已.

本来大概知道一些,看了题目差点也搞昏了呵呵。

指针是指向一些内存地址的变量,既可以是数据的地址也可以是函数的地址。
C++的成员指针遵从同样的原则。困难的是所有的指针需要一个地址,但在类内部没有地址;选择一个类的成员意味着在类中偏移。只有把这个偏移和具体对象的开始地址结合,才能得到实际地址。
成员指针的语法要求选择一个对象的同时逆向引用成员
指针。

struct simple { int a ; }
simple so;
simple* sp = &so;

如果有一个这个结构的指针sp和对象so,如果有一个指针指向一个类对象成员,甚至假设它代表对象内一定的偏移,将会发生什么?为了取得指针指向的内容,必须用*号逆向引用。但是,它只是一个对象内的偏移,所以还必须要指定那个对象。因此,*号要和逆向引用的对象结合。

sp->*pm = 47; so.*pm = 47;

定义pm的语法是什么?其实它像任何一个指针,必须说出它指向什么类型。并且,在定义中也要使用一个‘*’号。唯一的区别只是必须说出这个成员指针使用什么类的对象。当然,这是用类名和全局操作符实现的:

定义成员指针:
int simple::*pm;

定义并初始化成员指针:
int simple::*pm = &simple::a;
因为引用到一个类而非那个类的对象,因而,&simple::a仅可作为成员指针的语法表示。而pm到底能指向什么类型呢?从int simple::*这里很轻松能看出,它只能指向simple类的int类型a,所以答案应该是D呵呵