关于在 cpp 中转换对象的两个问题
Two questions about casting objects in cpp
问题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*
。
关于你的第二个问题:不可能把父亲的参照投向孩子,而且在多态性方面也是"错误的">
相关文章:
- 关于比较两个无序数组并删除 a[] 中可以在 b[] 中找到的元素的问题
- C++ 关于两个类构造函数的问题
- 程序没有问 3 个问题,而是将我对第一个问题的回答用于其他两个问题
- 无法理解代码背后的逻辑,这是在两个给定数字之间生成素数的优化问题
- 在 for 循环中更新两个变量时遇到问题C++
- 关于标准::condition_variables的两个问题
- 图问题:找出两个节点是否在每个节点的O(1)时间和O(2)存储中共享同一分支
- C++问题,我的两个源代码应该具有相同的输出,但它们是不同的
- 关于C++容器的两个问题
- C 两个派生的类中有彼此的对象(包括问题)
- 两个不同的对象 OpenGL.VAO VBO IBO 网格失真问题
- 如何解决数独问题,以便通过交换任何两个相邻的子网格,我仍然得到有效的答案?
- 比较两个字符的问题
- 我正在制作一个二十一点程序。我目前有两个问题
- 两个角度插值的逻辑问题?
- 关于合并两个列表的算法的一些问题
- 在忽略案例的同时确定两个字符串平等的逻辑问题
- 在打印出动态分配的数组中的前两个数字时遇到问题,其他数字工作正常
- 如何使其工作,两个类的问题
- 我在使用布尔函数时遇到问题,其中用户输入两个字母并输出字母表中最高的字母