• [C++] 转换构造函数&类型转换函数


    转换构造函数

    定义

    作用:将指定类型的数据转换为类的对象。

    1. 参数仅包含一个非本类const引用类型的参数

    2. 参数可以进行隐式转换如int->float

    可以通过explicit来禁止隐式转换。

    举例:

    class A
    {
    public:
        A() = default;
        A(int i) : a(i) {}
        A retVal()
        {
            return a;
        }
        void print()
        {
            cout << a << endl;
        }
    private:
        int a;
    };
    
    
    int main()
    {
        A a(2);
        A b = a.retVal();
        A c = 3;
        a.print();
        b.print();
        c.print();
        return 0;
    }

    类型转换函数

    定义

    作用:将一个类对象转换成另一个类型的数据

    1. 该函数必须为成员函数,不能是友元类型

    2. 类型转换函数不能指定返回类型,但是在函数内必须返回一个值传递的目标类型变量

    3. 转换函数没有参数

    举例

    class A
    {
    public:
        A() = default;
        A(int i) : a(i) {}
        operator int()
        {
            return a;
        }
        void print()
        {
            cout << a << endl;
        }
    private:
        int a;
    };
    
    
    int main()
    {
        A a(2);
        int b = a;
        A c = b + 1;
        cout << b << endl;
        c.print();
        return 0;
    }

    类型隐式转换还会发生在非内建A、B之间

    1. B公有继承A

    class A {};
    class B : public A {};
    int main()
    {
        A a;
        B b;
        a = b;
        return 0;
    }

    2. B中有类型转换函数

    class A {};
    class B
    {
    public:
        operator A() 
        {
            return a;
        }
        A a;
    };
    int main()
    {
        A a;
        B b;
        a = b;
        return 0;
    }

    3. A中实现非explicit的参数为B的构造函数

    class B {};
    class A 
    {
    public:
        A(const B&) {}
    };
    int main()
    {
        B b;
        A a(b);
        return 0;
    }
  • 相关阅读:
    unrecognized selector sent to class
    Xcode 7安装KSImageNamed 不启作用
    使用IntelliJ IDEA配置Erlang开发环境
    BN 详解和使用Tensorflow实现(参数理解)
    argparse 在深度学习中的应用
    转置卷积的详细理解
    递归该怎么写(二)
    递归该怎么写(一)
    二叉树的遍历python 代码
    经典排序的python实现
  • 原文地址:https://www.cnblogs.com/immjc/p/9008994.html
Copyright © 2020-2023  润新知