zoukankan      html  css  js  c++  java
  • 第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中就定义了很多公有函数,由于转换类型:

    运行结果:

    小结:

  • 相关阅读:
    BootStrap详解之(一)
    Centos6.5安装与配置Tomcat-8的方法
    Centos下安装jdk详解
    Html基础详解之(jquery)之二
    四层和七层负载均衡的区别
    linux下用script和scriptreplay对命令行操作录像
    Linux批量部署工具Expect
    Linux日常之Ubuntu系统中sendmail的安装、配置、发送邮件
    Linux日常之定时向文件传内容
    Linux日常之以当前时间命名文件
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9574182.html
Copyright © 2011-2022 走看看