zoukankan      html  css  js  c++  java
  • 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;//这里就会调用转换构造函数
    
    欢迎评论交流!
  • 相关阅读:
    算法训练 P1103
    算法训练 表达式计算
    算法训练 表达式计算
    基础练习 时间转换
    基础练习 字符串对比
    Codeforces 527D Clique Problem
    Codeforces 527C Glass Carving
    Codeforces 527B Error Correct System
    Codeforces 527A Glass Carving
    Topcoder SRM 655 DIV1 250 CountryGroupHard
  • 原文地址:https://www.cnblogs.com/alking1001/p/12003420.html
Copyright © 2011-2022 走看看