`

类型转换运算符

阅读更多

在编程过程中,我们经常需要把一种类型转换为另外一种类型。在转换过程中,我们需要关心两件事情:1。这种类型转换是否合法?2。转换得规则如何?

C++缺省自动支持几种类型转换:基础类型之间的转换;派生类指针向基类指针的转换;非常量类型向常量类型的转换等等。对于其他类型间的转换,则没 有规定。举例来说,CString是一种字符串类型,它和LPCTSTR是否可以转换?转换的规则是怎样的?这在设计CString这个类时必须考虑的。

对于自定义类型(包括所有非语言支持的库,如MFC),我们可以通过类型转换运算符来告诉编译器该类型可以转换为哪种类型,转换的规则是怎样的。以CString为例,它到LPCTSTR的转换被定义为:

// 下面代码摘录自vc6的afx.inl文件
_AFX_INLINECString:: operator LPCTSTR() const
... { return m_pchData;}

一个类型转换运算符指明了当前类型可以转换为哪种目标类型,该函数的实现则指明该如何进行这种转换。当我们在一个需要LPCTSTR类型的上下文中 使用CString对象时,编译器就知道实际上我们需要调用函数CString::operator LPCTSTR来转换CString到LPCTSTR。

这种函数定义有几个特别需要注意的地方:

1. 它没有返回值,因为这种函数永远返回要转换到的类型,因此没有必要提供返回值类型。因此operator LPCTSTR应该永远返回一个LPCTSTR的类型,或者是可以隐式转换为LPCTSTR的类型。

2. 它没有参数列表

没有看过标准文档,但是这样运算符提供参数列表貌似不太合理。

3. 它的函数原型为 operator <TYPE>,如果你要转换成其他类型,则把该类型填在<TYPE>位置。

我们在编程中如果看到一种类型被用到本该用另外一种类型的地方,第一个就是要查看看是否有该运算符的存在。常见的MFC编程中遇到的运算符重载包括

CWnd::operator HWND: 把CWnd对象转换为m_hWnd,等价于调用CWnd::GetSafeHwnd

CRect::operator LPRECT:把CRect对象转换为LPRECT, 经常看到GetClientRect调用就使用这个运算符

CGdiObject::operator HGDIOBJ 返回GDI对象对应的句柄

分享到:
评论

相关推荐

    深入理解C++中的类型转换运算符及其应用

    类型转换运算符是C++中用于显式类型转换的关键工具,它们允许程序员在需要时明确地转换数据类型。本文将深入探讨C++中的类型转换运算符,包括它们的使用场景、语法和一些实际应用示例。 类型转换运算符是C++中处理...

    java类型转换运算符.txt

    java类型转换运算符

    C++隐式类型转换运算符operator type()用法详解

    在C++编程语言中,`operator type()` 是一种特殊的成员函数,称为隐式类型转换运算符,它允许类的对象能够被隐式地转换为其他类型,包括基本数据类型或者自定义类类型。这个功能在处理类对象需要与其他类型兼容或者...

    C++运算符重载转换运算符(讲解详细,不容错过)

    转换运算符(也称为类型转换运算符或类型构造函数)是一种特殊的成员函数,它没有参数,返回值是特定的类型。它的主要目的是将类对象转换为其基类型、指针或引用,或者其他内置类型。转换运算符的声明通常以`...

    C++类型转换运算符的实例详解

    C++类型转换运算符的实例详解 C++中有4个类型转换运算符,使装换过程更规范 dynamic_cast; const_cast; static_cast; reinterpret_cast; 一、dynamic_cast 该运算符我在之前的文章中已经介绍过了 //...

    深入解析C++中的动态类型转换与静态类型转换运算符

    本篇文章将深入解析两种主要的类型转换运算符:动态类型转换(dynamic_cast)和静态类型转换(static_cast)。这两种转换方式在处理类层次结构和多态性时有各自的作用和适用场景。 首先,我们来看看静态类型转换...

    day02 【数据类型转换、运算符、方法入门】.zip

    在Java这样的强类型语言中,了解并熟练掌握数据类型转换、运算符和方法是成为一名合格的程序员的必经之路。在这个"day02 【数据类型转换、运算符、方法入门】"的学习资料中,我们将深入探讨这些关键概念。 首先,...

    程序设计-强制类型转换.pptx

    强制类型转换是指使用强制类型转换运算符将一个表达式的类型转换成所需类型的过程。这种类型转换可以使用强制类型转换运算符()将一个表达式的类型转换成所需类型。例如,float x = 3.5;y = 4.5;x = (int) x + y...

    第02章.数据类型和运算符2.pdf

    强制类型转换则是使用类型转换运算符显式转换类型。 总结以上知识点,Java程序员需要对标识符的命名规则、基本数据类型的分类和特点、变量的声明与使用、以及运算符的种类和用法有清晰的认识。这些概念的掌握对于...

    BYTE类型之间相互转换

    要将一个`BYTE`转换为其他基本类型,你可以直接赋值或使用强制类型转换运算符 `(type)`。例如,将`BYTE`转换为`int`: ```cpp BYTE byteValue = 123; int intValue = byteValue; //隐式转换 int intValue2 = ...

    C++4种强制类型转换

    C++提供了四种标准的强制类型转换运算符,分别是`static_cast`、`dynamic_cast`、`reinterpret_cast`和`const_cast`。这些运算符在不同的情景下有不同的用途和限制,下面我们逐一详细探讨。 1. `static_cast` `...

    数据类型转换的整理,

    3. C++的static_cast、dynamic_cast、reinterpret_cast和const_cast四种强制类型转换运算符提供了更安全、更灵活的转换方式。它们分别用于静态转换、运行时多态性转换、底层位模式转换和改变对象的const、volatile...

    C语言数据类型转换ppt课件.ppt

    隐式转换是由编译器自动完成的,而强制转换需要使用强制类型转换运算符来实现。 隐式转换的规则: 1. 在不同的数据类型之间进行混合运算时,由编译器自动完成转换,以保证精度不降低。 2. 转换按数据长度增加的...

    c++运算符优先级,word版本表格

    10. `reinterpret_cast` reinterpret 类型转换运算符 11. `new` 创建动态内存对象运算符 12. `delete` 释放对象运算符 13. `delete[]` 释放数组运算符 14. `noexcept` 能否抛出异常运算符 15. `sizeof` 对象大小...

    C语言的运算符与表达式.ppt

    C语言提供了多种运算符,包括算术运算符、关系运算符、逻辑运算符、赋值运算符、条件运算符、逗号运算符、指针运算符、求字节数运算符、强制类型转换运算符、分量运算符、下标运算符等。 算术运算符 算术运算符是...

    C++ 类型转换运算符

    * 实现int类型转换为SamllInt类型 */ SmallInt(const int val): value(val) { cout &lt;&lt; "SmallInt(const int val)" &lt;&lt; endl; } /** * class-type conversion * 无显式返回类型 * 无形参 * ...

    数据类型运算符PPT学习教案.pptx

    10. 强制类型转换运算符:(类型),如(double)5将整数5转换为double类型。 11. 分量运算符:.和-&gt;,用于访问结构体或联合体成员,以及指向结构体或联合体的指针的成员。 12. 下标运算符:[],如arr[i]用于访问数组...

Global site tag (gtag.js) - Google Analytics