返回信息流class A
{
public:
int a;
private:
int b;
};
class B: public A
{
};
A a;
B b;
cout<<sizeof(a)<<endl;//8
cout<<sizeof(b)<<endl;//8
为什么子类的对象要包含父类的私有变量呢?
这是一条镜像帖。来源:北邮人论坛 / cpp / #29136同步于 2009/9/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
子类的对象模型中也包含了父类的私有变量吗?
never115
2009/9/26镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
【 在 never115 的大作中提到: 】
: 那获取对象的地址后,通过偏移量岂不是可以取到父类的私有值了?
对象私有性是编译器的限制,而不是内存本身属性的限制。
看下这段代码:
#include <stdio.h>
class A {
private:
int a;
int b;
public:
int Geta(void) {return a;}
};
static char *p = "error";
int main()
{
A a;
int *pA = (int*)&a;
*pA = 0x99;
printf("%X\n", a.Geta());
*p = 'a'; //内存本书的属性错误导致访问违规
return 0;
}
A 在 B的内存空间中是 整体存储的。
既然是继承, 那肯定要继承父类的数据成员(与访问属性没有关系);
只是在访问的时候,父类的私有成员变量在子类中无法直接访问。
【 在 never115 的大作中提到: 】
class A
{
public:
int a;
private:
int b;
};
class B: public A
{
};
A a;
B b;
cout<<sizeof(a)<<endl;//8
cout<<sizeof(b)<<endl;//8
为什么子类的对象要包含父类的私有变量呢?