C++ 学习(一)类型转换
来源:互联网 发布:退出mysql命令行 编辑:程序博客网 时间:2024/05/22 22:47
1.类型转换按方式分为隐式转换和显式转换。
隐式转换:由编译器自动完成,无需用户干预。
显式转换:采用一定的形式进行转换:类型名(数据) / C中(类型名)数据
2.关于转换构造函数
构造函数的一种,主要用于类型转换,格式严格规定为单参数构造函数。
例:Complex类
Complex(double r){Real=r;imag=0;} int(double r);
Complex a;
a=2.4; 相当于a=Complex(2.4);
编译器如果发现语法有问题,会检查是否存在转换构造函数,有,则隐式转换。
3.关于类型转换函数
转换构造函数是将一种数据类型转换成类对象。如果编译器发现需要将类转换成某种数据类型,那该怎么办?
类型转换函数的一般形式:operator 类型名(){转换函数的实现}
没有函数类型,没有参数。
例:
#include<iostream>
using namespace std;
class Complex
{
public :
Complex(){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
operator double(){return real;}
private:
double real;
double imag;
};
int main()
{
Complex c1(3,4),c2(5,-10),c3;
double d;
d=2.5+c1;
cout<<d<<end1;
return0;
}
d=2.5+c1;
由于类成员没有对运算符+重载,所以2.5与c1无法直接向加。编译器发现存在类型转换函数,故将 隐式调用double(), c1转换为 double 型3,并将该结果存放在临时变量里。运算d=2.5+3得到结果。
若主函数中有c3=2.5+c1;如果没有运算符+的重载,编译器会出错。当 运算符重载函数作为类成员出现时,编译器会理解为c3=2.5.operator +(c1);由于2.5非complex类,这种解析编译器也会出错。对于c3=c1+2.5的格式,编译器会正确处理。
这种情况使用户不能方便的使用交换率,为了改变这一不便,需要将重载函数作为友元函数而不是类成员函数。(双目运算符的重载一般都采用友元函数的方式)
friend Complex operator +(Complex c1,complex c2);
在函数体外定义:
Complex operator +(Complex c1,complex c2);
{return Complex (c1.real +c2.real,c1.imag+c2.imag);}
这样,对于c3=2.5+c1;(需要增加转换构造函数)编译器在遇到+号时,会搜索+两端的数据并引用友元的运算符重载函数,其形式变为:c3=operator+(2.5,c1); 而参数定义都是Complex对象,因此,隐式调用转换构造函数,形式变为:c3=operator+(Complex (2.5),c1);
- 有章法的学习c++(5)类型转换(一)
- C++ 学习(一)类型转换
- struts2学习(一)类型转换--DefaultTypeConverter
- 类型转换(C++)
- [深入理解C++(一)]类型转换(Type Casting)
- [深入理解C++(一)]类型转换(Type Casting)
- [深入理解C++(一)]类型转换(Type Casting)
- [深入理解C++(一)]类型转换(Type Casting)
- 【OpenCV学习笔记】【类型转换】一(IplImage和cv::Mat的类型相互转换)
- C#.NET 中的类型转换(一)
- javaScript学习(一)——js布尔类型转换
- C学习笔记(三) 数据类型分类及类型转换
- 有章法的学习c++(5)类型转换(二)
- Struts2学习笔记之类型转换 一
- (一)strus2类型转换
- C/C++学习笔记28:类型转换
- C++primer学习笔记-----4.11类型转换
- 类型转换(c中)
- 谁知道如下这样报表是用水晶报表做的吗,如不是水晶报表做的,又是如何做的呢,
- 用Visual C#创建Windows服务程序
- 获取本机公网上的IP地址(借助发布在公网上的IP查询网站)
- 人力大量输出:中国距劳动力短缺时代还有多远?
- 提高EQ
- C++ 学习(一)类型转换
- 中国劳动力输出让世界紧张
- FLEX 的crossdomain.xml的问题
- 频繁启动和销毁的程序,使用SendMessage,PostMessage;
- 正则表达式30分钟入门教程
- 搜索技术总结整理
- 新的开始
- 什么是爱
- 简单循环的两个小注意