注册 登录
编程论坛 C++教室

没理解父类和子类的关系

后卿 发布于 2023-05-09 17:15, 75 次点击
父类指针可以指向子类对象
不过访问不了子类的自己原本的成员,这是因为父类本身的内存里面没有子类的成员,所以无法访问
子类的指针不能指向父类对象、
这是因为子类的内存里面的成员比父类多,一旦指针去访问这些多出来的成员,就会造成内存问题
可是为什么不能反过来呢?
父类指针指向子类对象,指针访问子类特有成员,这些成员在父类中没有,所以导致非法访问的问题
2 回复
#2
rjsp2023-05-09 21:46
可是为什么不能反过来呢?父类指针指向子类对象,指针访问子类特有成员,这些成员在父类中没有,所以导致非法访问的问题
这是陈述句,还是问句?

struct base
{
};

struct derived001 : base
{
    int a;
};


struct derived002 : base
{
    int b;
};

void foo( base* p )
{
    你能确定 p->a 存在? p->b 存在?
}

所以,才会有虚函数、dynamic_cast、CRTP 等手段
#3
后卿2023-05-10 19:12
回复 2楼 rjsp
当 p->a 、p->b为什么不报错呢?为什么它要设置virtual等语法出来呢
为什么子类指针访问父类成员就会报错呢?
为什么父类指针访问子类对象就不让它报错,反而设置了virtual、CRTP这些手段来保护它

[此贴子已经被作者于2023-5-10 19:14编辑过]

1