成员变量指针

成员变量指针是C/C++所特有的东西,我个人感觉这个特性在目前用途不大。但是,学习它倒是有必要,否则看一些前辈们的炫技的代码就容易懵逼。顺便插一句,C++确实过度设计,很多特性存在的意义或许就是为了和很多过去的代码兼容。作为面向对象萌芽阶段实现的编程语言。这些也是在所难免,开拓者的无奈。

成员变量指针很有趣。它和普通指针不一样,普通指针是表示所指对象在内存中的位置。但是,成员变量指针表示的是成员变量在对象中的偏移量。同时,成员变量指针只能作用在非静态变量上。

  • example code
class test{
public:
static int num;
long count;
};
int main()
{
long test::*p=&test::count;
return 0;
}

如果用printf(“%p”,p)输出该指针你会看到一个16进制的偏移量。表示count在类的内存中的排列位置。关于这种排列方式,不同的编译器之间会有很大的差别。顺便说一句,这是个很蛋疼的现实,由于不同的编译器实现面向对象的方式差别很大,因此编译的二进制代码之间不存在兼容性,也是导致C++跨平台能力弱的一个原因,我们永远离不开编译、编译……..

如果要借助成员变量指针输出成员呢?OK,show you the code!

#include <iostream>
class student{
public:
student(int id);
int id;
};
student::student(int _id):id(_id) {
}
int main()
{
int student::*p=&student::id;
student one(3);
std::cout<<one.*p<<std::endl;
return 0;
}

以上代码,最终会使用成员变量指针输出成员id的值。