C++向下转换有什么用?以及这个例子为什么有成功有失败?
向上转我还能理解,向下转有什么用...感觉完全就是乱来嘛...
另外这个例子中为什么一个能成功,一个失败?原因是什么?
另外这个例子中为什么一个能成功,一个失败?原因是什么?
#include <iostream>
using namespace std;
class CObject
{
public:
virtual void Serialize()
{
cout<<"CObject::Serialize()\n\n"<<endl;
}
};
class CDocument : public CObject
{
public:
int m_datal;
virtual void Serialize()
{
cout<<"CDocument::Serialize()\n\n"<<endl;
}
};
class CMyDoc : public CDocument
{
public:
int m_data2;
CMyDoc(CDocument &Doc)
{
m_data2 = 0;
}
void func()
{
cout<<"CMyDoc::func()"<<endl;
Serialize();
}
virtual void Serialize()
{
cout<<"CMyDoc::Serialize()\n\n"<<endl;
}
};
int main()
{
CDocument *document = new CDocument;
CMyDoc *c = dynamic_cast<CMyDoc*>(document);
if(c == NULL)
cout<<"null"<<endl;
((CMyDoc)(*document)).func();//这是什么神奇用法,why??
return 0;
}
...全文
相关推荐
c++版yaml库yaml-cpp
- **异常处理**:在尝试访问不存在的键或转换失败时,yaml-cpp会抛出异常。因此,编程时应使用try-catch块处理可能出现的错误。
一文理解cast向下转换内部代码
在使用Cast进行向下转换时,有几点需要注意:1. **类型安全**:确保对象实际上是目标类型的实例,否则,转换将会失败,并在运行时抛出异常。
C++实现的Fins库文件源代码 FinsLib_CPP.zip
网络环境:确保PLC与应用服务器之间的网络连接稳定,避免因网络问题导致通信失败。2. PLC状态:在尝试通信前,确认PLC处于运行状态,否则可能无法成功读写数据。3.
cpp代码-c++类型转换 (cast)
静态类型转换(Static Cast): 静态类型转换是C++中最安全的转换方式,它用于类层次结构中的向上或向下转型。
深入解析C++中的动态类型转换与静态类型转换运算符
向下转换(Downcasting):这是从基类到派生类的转换,需要使用dynamic_cast,并且只有在类型匹配时才成功。如果试图将非派生类的对象转换为派生类,转换会失败并返回nullptr。


