可以这么转:
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;
}
这种转换是不安全的。
反过来,
B bb;
A &ptA = &bb
这种才是合理的多态用法。
这个好像是可以的,但是不同编译器支持不一样,但是觉得用pt = (A*)&aa也可以吧。另外看到有人写到可以(A*&)pt = &aa,测试居然可以,原理就想不懂了。 上网搜关键字“类型转换 左值”有些文章提到了这个问题。 最后就是这种父类到子类的转换是不安全的,访问子类中的变量会出现问题。