dynamic_cast(Source)!=0;这句什么意思?

prettyladys 2003-09-17 10:22:10
请详细说说.我不明白..
...全文
84 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangchun_xn 2003-09-18
  • 打赏
  • 举报
回复
2分?呵呵。。。
IAMCDYY2003 2003-09-18
  • 打赏
  • 举报
回复
说简单点就是一种安全转换
winkiky 2003-09-18
  • 打赏
  • 举报
回复
类型转换:dynamic_cast<T>(x)补充:
如果x是指针,若转换失败返回一个NULL指针,如果x是引用,若转换失败就会抛出一个bad_cast的异常
winkiky 2003-09-18
  • 打赏
  • 举报
回复
jiangchun_xn(如果能再遇到你)说的很详细了,作一点补充就是对于指针的判断最好不用0,而该用NULL!
jiangchun_xn 2003-09-18
  • 打赏
  • 举报
回复
类型转换符dynamic_cast,它被用于安全地沿着类的继承关系向下进行类型转换。这就是说,你能用dynamic_cast把指向基类的指针或引用转换成指向其派生类或其兄弟类的指针或引用,而且你能知道转换是否成功。失败的转换将返回空指针(当对指针进行类型转换时)或者抛出异常(当对引用进行类型转换时)
dynamic_casts在帮助你浏览继承层次上是有限制的。它不能被用于缺乏虚函数的类型上,也不能用它来转换掉constness:

如你想在没有继承关系的类型中进行转换,如果是为了去除const,用const_cast

----节选C++条款Item M2:尽量使用C++风格的类型转换
bobbycn 2003-09-18
  • 打赏
  • 举报
回复
正如 ThinkX 所说:"不是什么宏,而是 C++中内置的四种转换之一,用于向下转换。"
dynamic_cast<TFileListBox*>(Source)!=0;
判断Source能不能转换成TFileListBox指针,不能返回空。
如Source中指向TFileListBox基类的指针,而且基类定有虚函数时,
dynamic_cast<TFileListBox*>(Source)返回TFileListBox指针;否则返回空。

FILENAME.C_STR()
FILENAME是什么类别?
windindance 2003-09-18
  • 打赏
  • 举报
回复
如果Source是一个TFileListBox,就相当于TFileListBox(Source)强制转换
否则返回NULL。
所有时候应该使用dynamic_cast代替传统的强制转换。
传统的强制转换无论Source是什么,都转换为TFileListBox。
假如你把一个其他的东西转换为TFileListBox,就很容易产生内存错误。
jiangchun_xn 2003-09-18
  • 打赏
  • 举报
回复
如果转化失败,就返回NULL。
Source是TFileListBox的基类指针。
fantasylu 2003-09-18
  • 打赏
  • 举报
回复
能详细点吗?
ThinkX 2003-09-18
  • 打赏
  • 举报
回复
dynamic_cast<TFileListBox*>(Source);
不是什么宏,而是 C++中内置的四种转换之一,用于向下转换。
jarodmike 2003-09-18
  • 打赏
  • 举报
回复
dynamic_cast<TFileListBox*>(Source)!=0
这句话的意思是对动态转换source源中的指针TFileListBox*>进行判断.
prettyladys 2003-09-18
  • 打赏
  • 举报
回复
UP
aliker 2003-09-18
  • 打赏
  • 举报
回复
dynamic_cast<TFileListBox*>(Source)!=NULL(最好不要用0)
dynamic_cast<T *>P
测试P是否为T类型的指针,如果是,返回T类型的指针,否则返回NULL
void __fastcall TForm1::SomeButtonClick(TObject *Sender)
{
if(dynamic_cast<TButton*>(Sender))
ShowMessage("这个事件是Button触发的!");
if(dynamic_cast<TSpeedButton*>(Sender))
ShowMessage("这个事件是SpeedButton触发的!");
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
SomeButtonClick(Sender);
}
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
SomeButtonClick(Sender);
}
如果你有一个按钮和快速按钮,他们触发的事件都一样,如果分别为按钮和快速按钮各写一个事件处理函数,代码重复,显然没有必要。这时可以为它们指定同一个事件处理函数(如上面的SomeButtonClick。如果你要区分是哪个控件触发的,则可以用dynamic_cast<T *>P测试一下。
FILENAME.c_str()
.c_str()返回AnsiString类的字符指针
如AnsiString FILENAME="c:\\1.txt";
char *p;
p=FILENAME.c_str()返回C类型的字符指针。比如有些WinAPI函数的参数为char *,直接用AnsiString不行,得转化一下。
AnsiString FileName="c:\\1.txt";
FILE *fp;
fp=fopen(FileName.c_str(),"r+");
guanshangming 2003-09-17
  • 打赏
  • 举报
回复
dynamic_cast<TFileListBox*>(Source)
判断安全类型转换是否成功,成功返加非0

FILENAME.C_STR()
我只知道AnsiString中有个成员函数 c_str()意思是取字符串的地址
tongjin9 2003-09-17
  • 打赏
  • 举报
回复
source是一個變量吧
dynamic_cast<TFileListBox*>(Source)應該是類型轉換吧,dynami_cast應該是一個宏,規定
轉換的樣式
FILENAME.C_STR(),好像是獲得filename得地址的意思吧
prettyladys 2003-09-17
  • 打赏
  • 举报
回复
人都为分吗?我是不会..........哎.
prettyladys 2003-09-17
  • 打赏
  • 举报
回复
还有FILENAME.C_STR()什么意思??????

13,870

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧