关于在 cpp 中转换对象的两个问题

Two questions about casting objects in cpp

本文关键字:问题 两个 对象 cpp 转换      更新时间:2023-10-16

问题A

如果我有两个类:"父亲"和"MyClassa",我想这样做:

father* a;
MyClassa b;
a = &b;
((MyClassa *)a) - > b();

我可以像上面的示例中一样进行转换(b()是属于MyClassa类的函数,father类中找不到(。

但是当我这样做时:

father* a;
MyClassa b;
a = &b;
a = ((MyClassa *)a);
a->b();

它对我不起作用,并告诉我他b()函数在该类中不存在(就像转换不起作用一样(。

这两个代码示例之间实际上有什么区别,是什么导致了这种差异?

问题 B

当我用"dynamic_cast"来塑造一个父亲是这样的孩子时:

Father * fp= new Father;
Child * cp = dynamic_cast<Child *> fp;

它向指针返回一个"0"值。但是当我对参考做同样的事情时:

Father & fp= new Father;
Child & cp = dynamic_cast<Child &> fp;

它引发错误"不良铸造"。

为什么会有区别?

在此

行中

a = ((MyClassa *)a);

该术语被转换为MyClassa*但随后又回到father*(在作业中(,因此您最终会得到一个father*

关于你的第二个问题:不可能把父亲的参照投向孩子,而且在多态性方面也是"错误的">