需要下行广播澄清
Need downcasting clarification
本文关键字:广播 更新时间:2023-10-16
我不太明白如何向下转换。显然我不能这样做。。。
class myType
{
};
class otherType : public myType
{
};
int main()
{
myType* obj = new myType;
otherType* castObj = dynamic_cast<otherType*>(obj);
delete obj;
}
我错过了什么?
我认为需要一些澄清。
当B类是从A类派生而来时,以下情况成立:
- 一个B就是一个a
- A不一定是B
如果你持有一个指向a的指针,你可以通过尝试dynamic_cast到B来检查它是否是B的a部分。如果转换成功,那是因为你实际上指向了B的a接口。如果演员阵容没有成功,那么你所指的类似A的东西实际上并不是B.
因此:
struct A {
virtual ~A();
}; // a base class
struct B : A {}; // a B is an A but an A is not necessarily a B
A* pa = new A;
// pa is pointing to an A
B* pb = dynamic_cast<B*>(pa);
// pb will now be NULL because this cast will have failed.
// Remember, a B *is an* A, but an A *is not necessarily a* B
delete pa;
// try again...
pa = new B;
// pa points to the A-part of a B, so
pb = dynamic_cast<B*>(pa);
// pb now points to the same object, but has access to all the methods on the B interface
delete pb;
// clean up
这就是我喜欢向我的女朋友解释的方式:
一辆汽车意味着它肯定有车轮。
有车轮的东西并不一定使其成为汽车。
假设我们有课程:
class A
和
Class B: public A
Class B
肯定具有Class A
的所有特征,甚至可能更多,但我们总是可以通过简单地"移除"它携带的所有额外东西来安全地将它转换(投射)为Class A
,反之亦然:我们不能确定Class A
将具有与您试图将其投射到的类(在本例中为Class B
)相同的特征。这就是为什么您必须使用dynamic cast
来通知编译器您已经意识到了随之而来的风险。
如果强制转换成功,dynamic_cast将返回类型为new_type的值。如果强制转换失败,并且new_type是指针类型,则返回该类型的空指针。如果强制转换失败,并且new_type是引用类型,则会抛出一个与std::bad_cast类型的处理程序匹配的异常。
相关文章:
- 其中降频广播实际上是有用的
- boost::asio UDP 广播客户端仅接收"fast"数据包
- NodeJs 服务器充斥着 UDP 广播,不发送响应
- 在具有 MPI 的超立方体中广播
- 为什么不允许这种交叉广播?
- c++ MPI 广播向量
- 为什么在template函数广播中把两个extensor表达式加在一起不正确
- 特征中的稀疏矩阵和向量加法广播
- 如何在INET的应用层中发送广播数据包
- 特征张量广播语法
- 我需要帮助理解GetIpAddrTable和接口广播地址
- C++ UDP 广播使用 ::write
- 如何将 Eigen::Tensor 广播到更高维度?
- Twitch的RTMP广播数据包体结构
- LAN 上的计算机不会始终使用 boost::asio C++接收到 255.255.255.255 的 UDP 广播
- 在本征C++中广播(两个)向量
- 广播__M128矢量的一个任意元素
- UDP 客户端不会在 esp32 上广播消息
- 如何使用Boost Asio接收到255.255.255.255的UDP广播
- mpi_bcast,将阵列缓冲区广播到接收缓冲区中的特定位置