• 第42课 类型转换函数(下)


    问题:

    类类型能否转换到普通类型?

    示例如下:

    可以看到上述程序中的强转是不成功的。

    这时就需要引入新的语法规则了,类型转换函数:

    添加类型转换函数:

    运行结果如下:

     分析:

    上述程序中的int i = t相当于调用函数,int i = t.operator  int()。

    类类型之间相互转换:

    示例:

     1 #include <iostream>
     2 #include <string>
     3 
     4 using namespace std;
     5 
     6 class Test;
     7 
     8 class Value
     9 {
    10 public:
    11     Value()
    12     {
    13     }
    14     explicit Value(Test& t)
    15     {
    16     }
    17 };
    18 
    19 class Test
    20 {
    21     int mValue;
    22 public:
    23     Test(int i = 0)
    24     {
    25         mValue = i;
    26     }
    27     int value()
    28     {
    29         return mValue;
    30     }
    31     operator Value()
    32     {
    33         Value ret;
    34         cout << "operator Value()" << endl;
    35         return ret;
    36     }
    37 };
    38 
    39 int main()
    40 {   
    41     Test t(100);
    42     Value v = t;
    43     
    44     return 0;
    45 }

    程序中我们定义了Value对象和Test对象,Value对象中定义了转换构造函数,将Test类对象转换为一个Value类对象。而在Test类中定义了31行的类型转换函数,将一个Test类对象转换为Value类对象。

    编译器在编译第42行程序时,通过上述两种方法都可以得到Value类对象,因此,它就会犯难。

    当第14行不加explicit时,编译结果如下:

    在工程中,我们在14行加上explicit,不希望编译器进行自动转换。

    这样就可以编译通过了。

     工程中不会定义类型转换函数,而是定义一个公有的成员函数代替类型转换函数。

     Qt中就定义了很多公有函数,由于转换类型:

    运行结果:

    小结:

  • 相关阅读:
    Ubuntu16.04+cuda9.0+matlab+opencv3.3+caffe服务器配置(问题汇总)
    numpy 实践记录
    qwe框架- CNN 实现
    qwe 简易深度框架
    深度拾遗(08)
    python 环境配置
    Robotframework Web自动化实战课程
    常用javascript代码片段集锦
    AJax跨域请求百度音乐接口数据展示页面
    JavaScript 经典实例收集整理
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9574182.html
Copyright © 2020-2023  润新知