问题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;
它给我一个&#39; 0&#39;指针的值。 但是当我做同样的参考:
Father & fp= new Father;
Child & cp = dynamic_cast<Child &> fp;
它引发了一个错误&#39;糟糕的演员&#39;。
为什么会有区别?
答案 0 :(得分:1)
在这一行
pubsub.publish('subscriptionsUpdated', doc);
这个词会被转换为a = ((MyClassa *)a);
,但会回到MyClassa*
(在作业中),所以最终得到father*
。
关于你的第二个问题:不可能将父亲的引用转换为孩子,并且在多态性方面也是“错误的”