• C++类型转换(类型转换函数+类型构造函数)


    C++类型转换(类型转换函数+类型构造函数)

    类型转换函数

    类型转换运算符是类的一种特殊成员函数,它负责将一个类类型的值转换成其他类型

    graph LR 类类型--> 类型转换函数 --> 其他类型

    类型转换函数的一般形式如下所示:

    operator type()const;//类型转换运算符通常不会改变转换对象的内容,所以它一般被定义成 const 类型
    

    其中type表示某种类型。类型转换运算符可以面向任意类型(除了void之外)进行定义,只要该类型能作为函数的赶回类型。因此我们不允许转换成数组或者函数类型,但是允许转换成指针(包括数组指针及函数指针)或者引用类型。

    类型转换运算符既没有显式的返回类型,也没有形参,而且必须定义成类的成员函数。

    例如:

    class AB{
        int x;
        char y;
        public:
        	AB(int a, char b):x(a), y(b){}
        	operator char(){
                return y;
            }
        	operator int(){
                return x;
            }
    }
    AB tmp(1, 1.2);
    ans=1+tmp; //ans将会被赋值为2,这里会把tmp转换成int类型,也就是调用了operator int()函数。
    

    转换构造函数

    转换构造函数是把其他的类型转换为该构造函数所在的类类型。

    graph LR 其他类型 --> 转换构造函数 -->类类型

    转换构造函数的形式一般如下:

    类型名(其他类型名 变量名);
    
    1. 转换构造函数也是一种构造函数,遵循构造函数的一般规则。转换构造函数只有一个参数,作用就是将其他数据类型转换成本类类型。但是有一个参数的构造函数不一定是转换构造函数,它可以是普通的构造函数,仅仅起到对象初始化的作用。
    2. 转换构造函数不仅可以将标准类型转换成它所在类的类型,还可以将其他类类型转换成本类型(这里没有涉及)。
    class AB{
        int x; 
        char y;
        public:
        	AB(int a):x(a){//这个是构造函数,不是转换构造函数,因为转换构造函数没有成员初始化列表
                y='y';
            }
        	AB(int n){ //这个是转换构造函数
                x=n;
                y='y';
    		}
    }
    AB tmp=2;//这里就会调用转换构造函数
    
    欢迎评论交流!
  • 相关阅读:
    day25 初始面向对象
    JavaScript中的apply()和call()
    JavaScript中的arguments详解
    测试使用MarkDown在博客园发布博客
    《Spring实战》 1-2
    总结: 《jQuery基础教程》 5-完结
    总结: 《jQuery基础教程》 1-4章
    做个计划
    Nginx与tomcat组合的简单使用
    利用 Dijit 组件框架打造丰富的用户界面
  • 原文地址:https://www.cnblogs.com/alking1001/p/12003420.html
Copyright © 2020-2023  润新知