C++类的自动转换和强制类型转换

devtools/2024/11/30 12:33:02/

目录

一、类型转换        

二、转换函数


一、类型转换        

        C++⽀持内置类型隐式类型转换为类类型对象,需要有相关内置类型为参数的构造函数
        简单说就是可以将内置类型转化为自定义类型
        示例:
class Test
{
public:Test(int n1 = 0):num1(n1){}void print(){cout << num1 << endl;}
private:int num1;
};
int main()
{Test t1(100);t1.print();//C++⽀持内置类型隐式类型转换为类类型对象Test t2 = 100;t2.print();return 0;
}

        结果:

        程序将使用构造函数【Test ( int n1 )】 来创建一个临时的【Test】对象,,并将【100】作为初始值。随后在使用默认的拷贝构造函数将内容拷贝到【t2】中。这一过程称为隐式类型转换

        一个参数就要有一个参数的构造函数, 二个参数就要有二个参数的构造函数

        示例: 

class Test
{
public:Test(int n1 = 0, int n2 = 0):num1(n1),num2(n2){}void print(){cout << num1 << " " << num2 << endl;}
private:int num1;int num2;
};
int main()
{Test t1(100, 200);t1.print();//C++⽀持内置类型隐式类型转换为类类型对象Test t2 = { 100,200 };t2.print();return 0;
}

        将构造函数用于类型转换似乎是一项不错的特性,但是这种特性并非总是合乎需要,因此这总有可能导致意外发生

        C++新增了一个关键字【explicit】,用于关闭将构造函数用于类型转换

         示例:

class Test
{
public://explicit用于关闭将构造函数用于类型转换explicit Test(int n1 = 0):num1(n1){}
private:int num1;
};
Test t = 100;

        会报错 :

 

        如果使用了【explicit】限定了构造函数,规定它不可以用于隐式转换,但是它可以用于显示转换 

         示例:

class Test
{
public://explicit用于关闭将构造函数用于类型转换explicit Test(int n1 = 0):num1(n1){}void print(){cout << num1 << endl;}
private:int num1;
};
int main()
{//explicit限定了构造函数,规定它不可以用于隐式转换,但是它可以用于显示转换 Test t = (Test)100;t.print();return 0;
}

        结果:

 

二、转换函数

        既然内置类型可以转换为自定义类型,那么自定义类型可以转换为内置类型吗

        自定义类型是可以转换为内置类型,但是不是使用构造函数。要进行自定义类型转换为内置类型,必须要使用特殊的C++运算符函数——转换函数

        示例: 

class Test
{
public:Test(int n1 = 0):num1(n1){}//转换函数operator int() const{return num1;}
private:int num1;
};
int main()
{Test t1 = 100;int num = t1;cout << num << endl;return 0;
}

        结果:

转换函数的特点 

  • 转换函数必须是类方法
  • 转换函数不能指定返回值
  • 转换函数不能有参数

转换函数的形式

        operator typename ( );

        【typename】指出了要转换的类型,因此不需要指定返回值类型。转换函数是类方法意味着:它需要通过类对象来调用,从而告知函数要转换的值。因此函数不需要参数


http://www.ppmy.cn/devtools/138193.html

相关文章

Unity3D ngui和ugui区别与优缺点详解

前言 Unity3D是一款跨平台的游戏开发引擎&#xff0c;它支持多种平台&#xff0c;包括PC、移动设备和主机。在Unity3D中&#xff0c;UI系统是游戏开发中非常重要的一部分&#xff0c;它负责游戏中的用户界面的显示和交互。 对惹&#xff0c;这里有一个游戏开发交流小组&#…

40分钟学 Go 语言高并发:Go程序性能优化方法论

Go程序性能优化方法论 一、性能指标概述 指标类型关键指标重要程度优化目标CPU相关CPU使用率、线程数、上下文切换⭐⭐⭐⭐⭐降低CPU使用率&#xff0c;减少上下文切换内存相关内存使用量、GC频率、对象分配⭐⭐⭐⭐⭐减少内存分配&#xff0c;优化GC延迟指标响应时间、处理延…

【VBA实战】使用Word制作简易的考试及阅卷系统

这个事源于公司想简化面试流程&#xff0c;希望能通过一些简单的笔试及自动阅卷来提高对候选人的初步筛选工作的效率和准确性。我当时的想法是这样的&#xff1a; 1. 利用AI工具生成一个笔试题库&#xff0c;只要选择题和填空题 2. 利用VBA工具&#xff0c;根据需求自动从题库…

海康面阵、线阵、读码器及3D相机接线说明

为帮助用户快速了解和配置海康系列设备的接线方式&#xff0c;本文将针对海康面阵相机、线阵相机、读码器和3D相机的主要接口及接线方法进行全面整理和说明。 一、海康面阵相机接线说明 海康面阵相机使用6-pin P7接口&#xff0c;其功能设计包括电源输入、光耦隔离信号输入输出…

力扣--LCR 150.彩灯装饰记录II

题目 代码 if(root null){ return new ArrayList<>(); } Queue<TreeNode> queue new LinkedList<>();List<List<Integer>> res new ArrayList<>();queue.add(root);while(!queue.isEmpty()){int k queue.size();List<Integer> …

网络安全之渗透测试(Penetration Testing for Network Security)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

技术模板纪要

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 例如&#xff1a; openAI 的 GPT 大模型的发展历程。 整体架构流程 提示&#xff1a;这里可以添加技术整体架构 例如&#xff1a; 在语言模型中&#xff0c;编码器和解码器…

51-基于单片机的智能语音识别与处理系统设计

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;搞L298N驱动两个电机转动&#xff0c;然后搞LCD1602显示屏&#xff0c;弄个超声波传感器实时检测距离 通过LCD1602显示距离&#xff0c;如果距离小于阈值&#xff0c;则两…