[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;
}

 

posted @ 2018-05-08 16:20  immjc  阅读(395)  评论(0编辑  收藏  举报