我们知道通过指针访问数据时,并不是依据变量名,而是依据变量内存地址与指针的偏移量大小,具体介绍见“C++指针偏移原理”。
现在我们看一个例子,有两个类people与animal:
class people
{
public:
int age_p;
double weight_p;
double height_p;
};
class animal
{
public:
int age_a;
double weight_a;
};
people* p1=new people;
animal* a1;
p1->age_p=24;
p1->weight_p=140;
p1->height_p=180;
通过类的定义我们可以发现,两个类的前两个数据均为int与double,即people与animal这两个类前两项成员变量与对象指针p1、a1的地址偏移量是相同的。既然指针访问数据是根据偏移量大小而不是变量名,那么我们可不可以将p1的地址赋值给a1,然后通过a1去访问age_p与weight_p中的数据呢?
不多说直接上代码:
a1=(animal*)p1; //将people的对象指针p1强转成animal*并赋值给a1
cout<<"指针a1地址:"<<ip2decimal(a1)<<endl;
cout<<"p1->age_p:"<<a1->age_a<<endl;
cout<<"p1->weight_p:"<<a1->weight_a<<endl;
结果为:
完全可行,由此可见对于对象指针访问类中成员变量,同样也是根据成员变量与对象指针的偏移量大小,而不是成员变量名。
版权声明:本文为qq_41696018原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。