C++进阶学习(3)类类型转换

文章目录

    • 一、类类型转换
      • 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 后赋给对象 b

   a = 2 ;			// a = X ( 2 )
//隐式调用构造函数 X ( int ) 
//把 2 转换为类类型 X 后赋给对象
   f ( 3 ) ;			// f ( X ( 3 ) )
   f ( 10 , 20 ) ;		// error

2.类型转换函数

类型转换函数(Type Conversion Function)是一种特殊的成员函数,用于将一个类的对象转换为另一种类型。在C++中,类型转换函数可以帮助我们实现自定义类型之间的隐式或显式类型转换。

类型转换函数的特点如下:

  1. 类型转换函数必须是成员函数,不能是全局函数。
  2. 类型转换函数没有返回类型,也不需要void关键字。
  3. 类型转换函数的函数名必须是operator后接转换的目标类型,例如operator int()表示将类转换为int类型。
  4. 类型转换函数可以被隐式调用,也可以被显式调用。

下面是一个简单的示例,演示了一个类MyClass定义了一个类型转换函数,将类对象转换为int类型:

#include 

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; // 输出 42

    int num2 = static_cast<int>(obj); // 显式调用类型转换函数
    //或者int(obj) (int)a
    std::cout << num2 << std::endl; // 输出 42

    return 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)

你可能感兴趣的:(C++的学习,c++,学习)