C++ 类的自动转换与强制类型转换
2017-06-01 10:14
507 查看
一,从内置数据类型到用户自定义类型的转换
1,下面是自定义的Time类
class Time{
private:
int intVal;
double doubleVal;
public:
Time(int val):intVal(val){}
Time(double val):doubleVal(val){}
};
int main(){
int val = 10;
Time obj(5);
obj = val;
return 0;
}
程序分析:
在C++中,接收一个参数的构造函数为将该参数类型的值转换为自定义的类型提供了蓝图。因此,在上面的构造函数中,可以将int、double类型转换为Time类型。
2,可以将构造函数用作自动类型转换,但是这样做也会导致意外的类型转换。因此,C++提供了explicit关键字用于关闭这种特性。使用explicit关键字关闭了上面的自动类型转换,但仍然允许强制类型转换。
class Time{
private:
int intVal;
double doubleVal;
public:
explicit Time(int val):intVal(val){}
explicit Time(double val):doubleVal(val){}
};
int main(){
int val = 10;
Time obj(5);
obj = val; //不合法
obj = (Time)val; //合法,进行强制类型转换
return 0;
}
二,从用户自定义类型到内置类型之间的转换
上面介绍的是从int、double到Time类型的转换,这节要讲的是从Time类型到int、double等内置数据类型的转换。要进行相反的转换,必须使用特殊的C++运算符函数--转换函数,转换函数是用户定义的强制类型转换。
1,转换函数的原型
operator typeName();
2,使用转换函数应注意下面几点
a,转换函数必须是类方法。
b,转换函数不能指定返回类型。
c,转换函数不能有参数。
3,使用类型转换函数
class Time{
private:
int intVal;
double doubleVal;
public:
Time(int val):intVal(val){}
Time(double val):doubleVal(val){}
operator int() const{
return intVal;
}
operator double() const{
return doubleVal;
}
};
int main(){
int val = 10;
Time obj(5);
val = obj;
return 0;
}
1,下面是自定义的Time类
class Time{
private:
int intVal;
double doubleVal;
public:
Time(int val):intVal(val){}
Time(double val):doubleVal(val){}
};
int main(){
int val = 10;
Time obj(5);
obj = val;
return 0;
}
程序分析:
在C++中,接收一个参数的构造函数为将该参数类型的值转换为自定义的类型提供了蓝图。因此,在上面的构造函数中,可以将int、double类型转换为Time类型。
2,可以将构造函数用作自动类型转换,但是这样做也会导致意外的类型转换。因此,C++提供了explicit关键字用于关闭这种特性。使用explicit关键字关闭了上面的自动类型转换,但仍然允许强制类型转换。
class Time{
private:
int intVal;
double doubleVal;
public:
explicit Time(int val):intVal(val){}
explicit Time(double val):doubleVal(val){}
};
int main(){
int val = 10;
Time obj(5);
obj = val; //不合法
obj = (Time)val; //合法,进行强制类型转换
return 0;
}
二,从用户自定义类型到内置类型之间的转换
上面介绍的是从int、double到Time类型的转换,这节要讲的是从Time类型到int、double等内置数据类型的转换。要进行相反的转换,必须使用特殊的C++运算符函数--转换函数,转换函数是用户定义的强制类型转换。
1,转换函数的原型
operator typeName();
2,使用转换函数应注意下面几点
a,转换函数必须是类方法。
b,转换函数不能指定返回类型。
c,转换函数不能有参数。
3,使用类型转换函数
class Time{
private:
int intVal;
double doubleVal;
public:
Time(int val):intVal(val){}
Time(double val):doubleVal(val){}
operator int() const{
return intVal;
}
operator double() const{
return doubleVal;
}
};
int main(){
int val = 10;
Time obj(5);
val = obj;
return 0;
}
相关文章推荐
- C++:类的自动转换和强制类型转换
- 《C++ primer plus》:类的自动转换和强制类型转换
- C++风格的类型转换操作符与C风格的强制类型转换
- 【C++ / Java】char数组和string的相互转换及自动转换
- 类的自动转换和强制类型转换
- 数据类型转换,自动转换和强制类型转换实例
- C++动态类型转换、强制类型转换、静态类型转换举例分析
- C++ 类型自动转换 构造函数 复制构造函数 赋值操作运算符函数
- 类的自动转换和强制类型转换
- 如何在编译时刻判断两个类型是否可以自动转换?——《Modern C++ Design》读书笔记(1)
- C++ 强制类型转换和赋值中的类型转换
- 第十一章:运算符重载,友元函数,重载<<运算符,类的自动转换和强制类型转换
- C++浮点数转换为字符串时如何避免自动转换为科学计数法
- C++中的向上类型转换和向下类型转换+四种强制类型转换
- C++类的自动转换和强制类型转换
- C++ 操作符、局部 全局变量及自动转换原则
- c++转换函数和类的自动转换
- 学习C++——类的自动转换和强制类型转换
- C++之类型的自动转换
- c++ - 数组形参的退化/自动转换