64,671
社区成员
发帖
与我相关
我的任务
分享
#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;
}
if( ( CDocument * doc = dynamic_cast<CDocument *>(obj) ) != 0 )
{
doc->do_something();
}
int main()
{
CDocument *document = new CDocument;
CMyDoc *c = dynamic_cast<CMyDoc*>(document);
//document不是一个CMyDoc,而是一个CDocument,这个转换必然失败。
if(c == NULL)
cout<<"null"<<endl;
((CMyDoc)(*document)).func();//这是什么神奇用法,why??
//(CMyDoc)(*document)是将一个document强制类型转换为一个CMyDoc,
//这个转换将通过调用CMyDoc的构造函数CMyDoc(CDocument &Doc)来完成
//.func();在上一步构造出来的临时对象上调用func();
return 0;
}