zoukankan      html  css  js  c++  java
  • [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;
    }
  • 相关阅读:
    数据挖掘常用算法
    helloworld
    sqlserver 变量级基本语法
    存储过程
    动态代理jdk 和cglib
    创建表添加约束
    sqlserver 子查询
    创建数据库
    javaScript实现同意等待——心得
    JavaScript关于不要复制黏贴代码的心得
  • 原文地址:https://www.cnblogs.com/immjc/p/9008994.html
Copyright © 2011-2022 走看看