C++程序设计方法3:自动类型转换

方法1:在源类中定义目标类型转换运算符

#include <iostream>
using namespace std;

class Dst
{
public:
    Dst()
    {
        cout << "Dst::Dst()" << endl;
    }
};

class Src
{
public:
    Src()
    {
        cout << "Src::Src()" << endl;
    }
    operator Dst() const
    {
        cout << "Src::operator Dst() called" << endl;
        return Dst();
    }
};

方法2:在目标类中定义源类对象作参数的构造函数

#include <iostream>
using namespace std;

class Src;//前置声明,因为在Dst中要用到Src类
class Dst
{
public:
    Dst()
    {
        cout << "Dst::Dst()" << endl;
    }
    Dst(const Src& s)
    {
        cout << "Dst::Dst(const Src&)" << endl;
    }
};

class Src
{
public:
    Src()
    {
        cout << "Src::Src()" << endl;
    }
};

拷贝:同样类的对象拷贝给同样类的新对象;

void Func(Dst d) {}
int main()
{
    Src s;
    Dst d1(s);//这是直接构造,不是类型转化

    Dst d2 = s;//自动类型转换,注意:不要与拷贝构造函数搞混了;拷贝构造时同样类型对象之间的操作;
    Func(s);//自动类型转化
    return 0;
}

注意:两种自定义类型转换的方法不能同时使用;

怕什么真理无穷,进一寸有一寸的欢喜。---胡适
原文地址:https://www.cnblogs.com/hujianglang/p/6642823.html