关于在cpp

时间:2016-11-16 15:56:25

标签: c++ casting

问题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;。

为什么会有区别?

1 个答案:

答案 0 :(得分:1)

在这一行

pubsub.publish('subscriptionsUpdated', doc);

这个词会被转换为a = ((MyClassa *)a); ,但会回到MyClassa*(在作业中),所以最终得到father*

关于你的第二个问题:不可能将父亲的引用转换为孩子,并且在多态性方面也是“错误的”