社区
C++ Builder
帖子详情
dynamic_cast
(Source)!=0;这句什么意思?
prettyladys
2003-09-17 10:22:10
请详细说说.我不明白..
...全文
84
17
打赏
收藏
dynamic_cast<TFileListBox*>(Source)!=0;这句什么意思?
请详细说说.我不明白..
复制链接
扫一扫
分享
转发到动态
举报
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()什么意思??????
最简单的MP3播放器源码
适合Delphi初学者。所用控件包括:<br>TDriveComboBox<br>TDirectory
ListBox
<br>TFilterComboBox<br>T
File
ListBox
<br>TMediaPlayer<br>Tedit<br>TTrackBar
最简单的图像浏览器源码
4. **T
File
ListBox
**:这是用来显示指定目录内文件列表的控件,用户可以选择其中的图像文件进行预览。在图像浏览器的场景中,它会列出选定目录下所有符合过滤条件的图片文件。 5. **TImage**:此控件是Delphi中用于...
delphi7系统文件备份系统
if n<>0 then begin sTemp:=copy(s,1,n-1); sFront:=sFront+'\'+sTemp; b:=DirectoryExists(sFront); if b=false then MkDir(sFront); Delete(s,1,n); end; until n=0; end; end; procedure TForm1....
delphi7.0实现文本编辑器
1. **项目背景**:解释为什么选择实现文本编辑器,以及Delphi 7.0在这个项目中的优势。 2. **系统设计**:描述系统的架构,包括各组件的功能和它们之间的交互。 3. **技术实现**:详述每项功能的具体实现方法,如...
Delphi7组件经典解析.pdf
- **添加组件**:在设计时态下,打开组件面板(可通过菜单栏“视图”->“面板”->“组件”打开),然后将所需的组件拖放到窗体上。 - **设置属性**:选中组件后,在属性窗口中可以查看并修改组件的各种属性。 - **事件...
C++ Builder
13,870
社区成员
102,693
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章