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)通常把类型转换函数也称为类型转换运算符函数,由于它也是重载函数,因此也称为转换运算符重载函数。

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



相关文章
|
1月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
84 5
|
1月前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
81 4
|
2月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
2月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
80 6
|
2月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
39 0
C++ 多线程之线程管理函数
|
2月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
363 1
|
2月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
61 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
2月前
|
C++
C++构造函数初始化类对象
C++构造函数初始化类对象
25 0
|
26天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
42 2
|
1月前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
89 4