C++转换构造函数以及类型转换函数

简介: 🐰转换构造函数🐰类型转换函数

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

目录

🐰转换构造函数

🐰类型转换函数


🐰转换构造函数

转换构造函数指的是构造函数只有一个参数(或其他的参数都带有默认值),转换构造函数不仅将一个标准类型数据转换成类对象,也可以将另一个类的对象转换成转换构造函数所在类的对象

转换构造函数语法格式如下:

1. class A
2. {
3. public:
4.   A(const B &引用名)
5.     {
6.       //从B类 类型到A类 类型的转换
7.   }
8. };

例如:

1. #include<iostream>
2. using namespace std;
3. class Solid
4. {
5. public:
6.     Solid(int x,int y,int z):_x(x),_y(y),_z(z)
7.     {
8.         ;
9.     }
10.     void show()
11.     {
12.         cout<<"三维坐标:"<<_x<<","<<_y<<","<<_z<<endl;
13.     }
14.     friend  class Point;
15. private:
16.     int _x,_y,_z;
17. };
18. class Point
19. {
20. public:
21.     Point(int x,int y):_x(x),_y(y)
22.     {
23.         ;
24.     }
25.     Point(const Solid& ptr)
26.     {
27.         _x=ptr._x;
28.         _y=ptr._y;
29.     }
30.     void show()
31.     {
32.         cout<<"平面坐标:"<<_x<<","<<_y<<endl;
33.     }
34. private:
35.     int _x,_y;
36. };
37. int main()
38. {
39.     cout<<"原始坐标"<<endl;
40.     Point p(1,2);
41.     p.show();
42.     Solid s1(3,4,5);
43.     s1.show();
44.     cout<<"三维坐标转化为二维坐标"<<endl;
45.     p=s1;//如果没有转换类型构造函数,不同类进行赋值是错误的
46.     p.show();
47.     return 0;
48. }
49. 
50. 结果为:
51. 原始坐标
52. 平面坐标:1,2
53. 三维坐标:3,4,5
54. 三维坐标转化为二维坐标
55. 平面坐标:3,4

🐰类型转换函数

过构造函数可以进行类型转换,但是它的转换功能受到限制。由于无法为基本类型定义构造函数,因此,不能利用构造函数把自定义类型数据转换成基本数据类型的数据,只能从基本类型向自定义的类型转换类型转换函数则可以用来把原类类型转换成另一种目的类型

类型转函数的格式:

1. class 类名
2. {
3.   operator 目的类型()
4.     {
5.       函数体
6.   }
7. };

其中类名为原类类型;目的类型名为要转换成的类型

例如:

1. #include<iostream>
2. using namespace std;
3. class Swap
4. {
5. public:
6.     Swap(int x,int y):a(x),b(y)
7.     {
8.         ;
9.     }
10.     operator char()类型转换函数
11.     {
12.         return (char)a;
13.     }
14.     void show()
15.     {
16.         cout<<a<<" "<<b<<endl;
17.     }
18. private:
19.     int a,b;
20. };
21. int main()
22. {
23.     Swap s1(65,2);//ASCII中65就是字符A
24.     s1.show();
25.     char ch=s1;
26.     cout<<"ch的值为:"<<ch<<endl;
27.     return 0;
28. }
29. 结果为:
30. 65 2
31. ch的值为:A

关于类型转换函数的注意事项

(1)类型转换函数只能定义为一个类的成员函数而不能定义为类的友元函数或普通函数,因为转换的主体是本类的对象

(2)类型转函数和成员函数一样

(3)类型转换函数既没有参数,也不显式给出返回类型

(4)类型转换函数中必须有"return 目的类型的数据"的语句

(5)一个类可以定义多个类型转换函数

(6)通常把类型转换函数也称为类型转换运算符函数,由于它也是重载函数,因此也称为转换运算符重载函数。

🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸



相关文章
|
2天前
|
编译器 C++
C++ 类构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。
42 30
|
23天前
|
编译器 C++ 容器
【C++】String常见函数用法
【C++】String常见函数用法
15 1
|
1月前
|
C++
c++常见函数及技巧
C++编程中的一些常见函数和技巧,包括生成随机数的方法、制表技巧、获取数字的个位、十位、百位数的方法、字符串命名技巧、避免代码修改错误的技巧、暂停和等待用户信号的技巧、清屏命令、以及避免编译错误和逻辑错误的建议。
18 6
|
1月前
|
存储 C++
c++学习笔记05 函数
C++函数使用的详细学习笔记05,包括函数的基本格式、值传递、函数声明、以及如何在不同文件中组织函数代码的示例和技巧。
27 0
c++学习笔记05 函数
|
30天前
|
存储 C++
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
30 0
|
1月前
|
Dart 编译器 API
Dart ffi 使用问题之在C++线程中无法直接调用Dart函数的问题如何解决
Dart ffi 使用问题之在C++线程中无法直接调用Dart函数的问题如何解决
|
1月前
|
存储 算法 搜索推荐
【C++】类的默认成员函数
【C++】类的默认成员函数
|
16天前
|
存储 编译器 C++
C ++初阶:类和对象(中)
C ++初阶:类和对象(中)
|
1月前
|
存储 安全 编译器
【C++】类和对象(下)
【C++】类和对象(下)
【C++】类和对象(下)
|
16天前
|
C++
C++(十六)类之间转化
在C++中,类之间的转换可以通过转换构造函数和操作符函数实现。转换构造函数是一种单参数构造函数,用于将其他类型转换为本类类型。为了防止不必要的隐式转换,可以使用`explicit`关键字来禁止这种自动转换。此外,还可以通过定义`operator`函数来进行类型转换,该函数无参数且无返回值。下面展示了如何使用这两种方式实现自定义类型的相互转换,并通过示例代码说明了`explicit`关键字的作用。