C++转换构造函数以及类型转换函数
🐶博主主页:@ᰔᩚ. 一怀明月ꦿ
❤️🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++
🔥座右铭:“不要等到什么都没有了,才下定决心去做”
🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀
目录
🐰转换构造函数
🐰类型转换函数
🐰转换构造函数
转换构造函数指的是构造函数只有一个参数(或其他的参数都带有默认值),转换构造函数不仅将一个标准类型数据转换成类对象,也可以将另一个类的对象转换成转换构造函数所在类的对象转换构造函数语法格式如下:class A { public:A(const B &引用名){//从B类 类型到A类 类型的转换} };
例如:
#include<iostream> using namespace std; class Solid { public:Solid(int x,int y,int z):_x(x),_y(y),_z(z){;}void show(){cout<<"三维坐标:"<<_x<<","<<_y<<","<<_z<<endl;}friend class Point; private:int _x,_y,_z; }; class Point { public:Point(int x,int y):_x(x),_y(y){;}Point(const Solid& ptr){_x=ptr._x;_y=ptr._y;}void show(){cout<<"平面坐标:"<<_x<<","<<_y<<endl;} private:int _x,_y; }; int main() {cout<<"原始坐标"<<endl;Point p(1,2);p.show();Solid s1(3,4,5);s1.show();cout<<"三维坐标转化为二维坐标"<<endl;p=s1;//如果没有转换类型构造函数,不同类进行赋值是错误的p.show();return 0; }结果为: 原始坐标 平面坐标:1,2 三维坐标:3,4,5 三维坐标转化为二维坐标 平面坐标:3,4
🐰类型转换函数
通过构造函数可以进行类型转换,但是它的转换功能受到限制。由于无法为基本类型定义构造函数,因此,不能利用构造函数把自定义类型数据转换成基本数据类型的数据,只能从基本类型向自定义的类型转换。类型转换函数则可以用来把原类类型转换成另一种目的类型类型转函数的格式:class 类名 {operator 目的类型(){函数体} };
其中类名为原类类型;目的类型名为要转换成的类型
例如:#include<iostream> using namespace std; class Swap { public:Swap(int x,int y):a(x),b(y){;}operator char()类型转换函数{return (char)a;}void show(){cout<<a<<" "<<b<<endl;} private:int a,b; }; int main() {Swap s1(65,2);//ASCII中65就是字符As1.show();char ch=s1;cout<<"ch的值为:"<<ch<<endl;return 0; } 结果为: 65 2 ch的值为:A
关于类型转换函数的注意事项
(1)类型转换函数只能定义为一个类的成员函数而不能定义为类的友元函数或普通函数,因为转换的主体是本类的对象(2)类型转函数和成员函数一样(3)类型转换函数既没有参数,也不显式给出返回类型(4)类型转换函数中必须有"return 目的类型的数据"的语句(5)一个类可以定义多个类型转换函数(6)通常把类型转换函数也称为类型转换运算符函数,由于它也是重载函数,因此也称为转换运算符重载函数。
🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸