文章目录
- 一、类类型转换
- 1.构造函数构造
- 2.类型转换函数
一、类类型转换
数据类型转换在程序编译时或在程序运行实现
基本类型 ←→ 基本类型
基本类型 ←→ 类类型
类类型 ←→ 类类型
类对象的类型转换可由两种方式说明:
构造函数 转换函数
称为用户定义的类型转换或类类型转换,有隐式调用和显式调用方式
1.构造函数构造
当类 ClassX 具有以下形式的构造函数:
说明了一种从参数 arg 的类型到该类类型的转换
ClassX :: ClassX ( arg ,arg1 = E1 ,…, argn = En ) ;
说明了一种从参数 arg 的类型到该类类型的转换
隐式转换
class X
{ // ……public :X ( int ) ;X ( const char * , int = 0 ) ;
};
void f ( X arg ) ;:X a = X( 1 ) ; // a = 1
//调用构造函数 X ( int )
//把 1 转换为类类型 X 后赋给对象 a
//也称 X ( 1 ) 为 X 类的类型常量X b = "Jessie" ; // b = X ( "Jessie" , 0 )
//调用构造函数X ( const char * , int = 0 )
//把字符串转换为类类型 X 后赋给对象 ba = 2 ; // a = X ( 2 )
//隐式调用构造函数 X ( int )
//把 2 转换为类类型 X 后赋给对象f ( 3 ) ; // f ( X ( 3 ) )f ( 10 , 20 ) ; // error
2.类型转换函数
类型转换函数(Type Conversion Function)是一种特殊的成员函数,用于将一个类的对象转换为另一种类型。在C++中,类型转换函数可以帮助我们实现自定义类型之间的隐式或显式类型转换。
类型转换函数的特点如下:
- 类型转换函数必须是成员函数,不能是全局函数。
- 类型转换函数没有返回类型,也不需要
void
关键字。 - 类型转换函数的函数名必须是
operator
后接转换的目标类型,例如operator int()
表示将类转换为int
类型。 - 类型转换函数可以被隐式调用,也可以被显式调用。
下面是一个简单的示例,演示了一个类MyClass
定义了一个类型转换函数,将类对象转换为int
类型:
#include <iostream>class MyClass {
private:int value;public:MyClass(int val) : value(val) {}operator int() {return value;}
};int main() {MyClass obj(42);int num = obj; // 隐式调用类型转换函数std::cout << num << std::endl; // 输出 42int num2 = static_cast<int>(obj); // 显式调用类型转换函数//或者int(obj) (int)astd::cout << num2 << std::endl; // 输出 42return 0;
}
在上面的示例中,类MyClass
定义了一个类型转换函数operator int()
,它将MyClass
对象转换为int
类型。在main
函数中,我们可以隐式地将MyClass
对象转换为int
类型,也可以显式地使用static_cast
进行类型转换。
类型转换函数有两种使用方式:
隐式使用 i = a ;显式使用 i = a . operator int ( ) // int ( a ) ( int ) a
使用不同函数作类型转换函数:
int i = a ; // 用类型转换函数进行转换=i(a)X i = a ; // 用构造函数进行转换=i(a)