C++ 自动转换和强制类型转换(用户自定义类类型…
2020-06-10 16:00:45来源:博客园 阅读 ()
C++ 自动转换和强制类型转换(用户自定义类类型)
——C++不自动转换不兼容的类型,允许用户自定义类类型的自动和强制转换
其它类型转成类:
只接受一个参数的构造函数可作为转换函数(若其它参数都有默认值,则也符合情况)
class Stonewt { private: ... public: Stonewt (double lbs); {...} // template ofr double_-to-Stonewt conversion ... } ------------------------------------------------------------------>main() Stonewt myCat; // create a Stonewt object myCat = 19.6; // 隐式自动转换 use Stonewt(double) to convert 19.6 to Stonewt myCat = Stonewt (19.6); // 显示强制转换 myCat = (Stonewt) 19.6; // 显示强制转换
- 程序使用构造函数Stonewt(double)来创建一个临时对象,并初始化;随后采用逐成员赋值方式将该临时对象的内容复制到myCat中
- 关闭自动隐式转换:
- C++新增关键字explicit
- 用在声明头部
- 不影响显示强制转换
- 函数原型化提供的参数匹配过程,允许使用Stonewt (double) 构造函数来转换其它数值类型,例如允许传入int型数据,它将自动转换为double,条件是转换过程中不存在二义性
- 如果类中还有Stonewt (long) 就存在二义性,double可转换为long
转换函数:
——特殊的C++运算符函数,是用户定义的强制类型转换,可以像使用强制类型转换那样使用它们。
创建:
operator typeName ();
- 必须是类方法
- 不能指定返回类型
- 不能有参数
例如,转换为double类型的函数的原型如下
operator double ();
- double即typeName指出要转换成的类型
- 虽然没有声明返回类型,这个函数也将返回所需的值
使用:
cout<<"Poppins: "<<int (poppins)<<" pounds.\n"; // popins is object
cout语句使用显示强制类型转换
cout<<"Poppins: "<<poppins<<" pounds.\n";
这里的cout应用自动类型转换
-
- 类只定义了double转换函数时可用,若还有int转换函数,则编译器报错二义性
- 当类定义了两种或更多的转换时,仍可以使用显示强制类型转换来指出要使用哪个转换函数
原则上说,最好使用显示转换,而避免隐式转换(有时发生意想不到的错误:如将对象错当数组下标并不会报错)。在C++98中,关键字explicit不能用于转换函数,但C++11消除了这种限制
class Stonewt { ... // conversion functions explicit operator int() const; explicit operator double() const; };
有了这些声明后,需要强制转换时将调用这些运算符
将类对象赋给typeName变量或将其强制转换为typeName类型时,该转换函数将自动被调用
原文链接:https://www.cnblogs.com/suui90/p/13086516.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:C++ rand函数
下一篇:C++ 转换函数搭配友元函数
- C++ 转换函数搭配友元函数 2020-06-10
- C++ rand函数 2020-06-10
- C++ 友元函数 2020-06-10
- C++ 运算符重载 2020-06-10
- 如何0基础学习C/C++? 2020-06-06
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash