C++中派生类的指针转化成基类指针,能引用基类对象吗?

2024-12-19 20:15:56
推荐回答(3个)
回答1:

可以这么转:

pt = (B *)&aa;

补充:
单独 ((A *)pt) = &aa; 已经是语法错误了,这样的代码只能用在做对比时候,看看下面代码:

int main()
{
A aa;
A bb;
B *pt=(B *)&aa;

if (((A *)pt) == &aa)
printf("yes\n");
else
printf("no\n");

if (((A *)pt) == &bb)
printf("yes\n");
else
printf("no\n")

return 0;
}

回答2:

这种转换是不安全的。

反过来,
B bb;
A &ptA = &bb

这种才是合理的多态用法。

回答3:

这个好像是可以的,但是不同编译器支持不一样,但是觉得用pt = (A*)&aa也可以吧。另外看到有人写到可以(A*&)pt = &aa,测试居然可以,原理就想不懂了。 上网搜关键字“类型转换 左值”有些文章提到了这个问题。 最后就是这种父类到子类的转换是不安全的,访问子类中的变量会出现问题。