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

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

    怕什么真理无穷,进一寸有一寸的欢喜。---胡适
  • 相关阅读:
    在宝塔中升级mysql版本
    测试winform程序到树莓派运行
    winserver2012远程桌面进入只有CMD窗口,无桌面解决方法
    一七年春末
    Linux 上通过rpm安装mysql
    Linux 上关于iptables
    Linux环境下安装JDK
    Linux上安装tomcat
    Linux 下安装redis
    Map集合按照value和key进行排序
  • 原文地址:https://www.cnblogs.com/hujianglang/p/6642823.html
Copyright © 2020-2023  润新知