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

    运行结果:

    小结:

  • 相关阅读:
    Struts22222
    Struts2
    Java事务的概念
    Java设计模式之单例模式
    Spring的大框架
    mybatis大框架
    springmvc和spring的区别
    JavaScript-原型&原型链&原型继承&组合函数
    美丽的CSS图形和HTML5
    易买网项目的总实现超级详解
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9574182.html
Copyright © 2020-2023  润新知