精华内容
下载资源
问答
  • 向上类型转换VS向下类型转换

    万次阅读 2021-02-25 19:48:56
    将一个父类的引用指向一个子类的对象,称为向上转型(upcasting),自动进行类型转换。此时通过父类引用调用的方法是子类覆盖或继承父类的方法,不是父类的方法。 此时通过父类引用变量无法调用子类特有的方法; 如果...

    子类转换成父类时的规则:

    • 将一个父类的引用指向一个子类的对象,称为向上转型(upcasting),自动进行类型转换。此时通过父类引用调用的方法是子类覆盖或继承父类的方法,不是父类的方法。 此时通过父类引用变量无法调用子类特有的方法;
    • 如果父类要调用子类的特有方法就得将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转型,此时必须进行强制类型转换。
    package class01;
    
    public class demo {
        public static void main(String[] args) {
            show(new Cat()); // 以 Cat 对象调用 show 方法
            show(new Dog()); // 以 Dog 对象调用 show 方法
            Animal a = new Cat(); // 向上转型
            a.eat(); // 调用的是 Cat 的 eat
            Cat c = (Cat) a; // 向下转型
            c.work(); // 调用的是 Cat 的 work
        }
        public static void show(Animal a) {
            a.eat();
            // 类型判断
            if (a instanceof Cat) { // 猫做的事情
                Cat c = (Cat) a;
                c.work();
            } else if (a instanceof Dog) { // 狗做的事情
                Dog c = (Dog) a;
                c.work();
            }
        }
    }
    abstract class Animal {
        abstract void eat();
    }
    class Cat extends Animal {
        public void eat() {
            System.out.println("吃鱼");
        }
        public void work() {
            System.out.println("抓老鼠");
        }
    }
    class Dog extends Animal {
        public void eat() {
            System.out.println("吃骨头");
        }
        public void work() {
            System.out.println("看家");
        }
    }
    

    在这里插入图片描述

    展开全文
  • C++ 强制类型转换和赋值中的类型转换

    万次阅读 多人点赞 2017-02-02 12:11:45
    强制类型转换原C语言的形式:(类型名)(表达式)比如:(double)a //把a转换为double类型 (int)(a+b) //把a+b的值转换为整型需要注意的是:如果强制类型转换的对象是一个变量,那么该变量不需要用括号括起来;但是如果...

    强制类型转换

    原C语言的形式:

    (类型名)(表达式)

    比如:

    (double)a  //把a转换为double类型
    (int)(a+b)  //把a+b的值转换为整型
    

    需要注意的是:如果强制类型转换的对象是一个变量,那么该变量不需要用括号括起来;但是如果对象是一个包含多项的表达式,则表达式应该用括号括起来。

    (int)(a+b)  //把a+b的值转换为整型
    (int)a+b //把a的值转换为整型,然后加b
    

    C++新增加的形式:

    类型名(表达式)

    该形式的类型名不需要括括号,但是待转换的对象不管是变量还是表达式都需要用括号括起来,比如:

    int(x)
    int(x+y)
    

    举个栗子:

    #include <iostream>
    using namespace std;
    int main()
    {
    	float x;
    	int i;
    	x = 3.6;
    	i = (int)x;
    	cout<<"x = "<<x<<",i = "<<i<<endl;
    	getchar();
    	return 0;
    }
    

    运行结果:
    x = 3.6,i = 3

    赋值过程中的类型转换
    如果赋值运算符两侧的类型不一致,但都是数值型或字符型,在赋值时可以自动进行类型转换。

    字符型与数值型的说明:
    在C++基本的数据类型中,可以分为四类:整型,浮点型,字符型,布尔型。其中数值型包括 整型与浮点型;字符型即为char。

    (1)将浮点型数据赋值给整型变量时,舍弃其小数部分。

    	float x;
    	int i;
    	x = 3.6;
    	i = x;
    	cout<<"x = "<<x<<",i = "<<i<<endl;
    

    运行结果:
    x = 3.6,i = 3

    (2)将整型数据赋值给浮点型变量时,数值不变,但是以指数形式存储。

    	float x;
    	int i;
    	i= 3;
    	x = i;
    	cout<<"x = "<<x<<",i = "<<i<<endl;
    

    运行结果:
    x = 3,i = 3

    (3)将double型数据赋值给float型变量时,注意数值范围溢出。

    	float x;
    	double i;
    	i= 3.123456789e100;
    	x = i;
    	cout<<"x = "<<x<<",i = "<<i<<endl;
    

    此时出现溢出。

    (4)字符型数据可以赋值给整型变量,此时存入的是字符的ASCII码。

    	char x;
    	int i;
    	x = 'C';
    	i = x;
    	cout<<"x = "<<x<<",i = "<<i<<endl;
    

    运行结果:
    x = C,i = 67

    (5)将一个int,short或long型数据赋值给一个char型变量,只将低8位原封不动的送到char型变量中。
    (6)将有符号型数据赋值给长度相同的无符号型变量,连同原来的符号位一起传送。

    展开全文
  • 类型转换类型转换函数

    千次阅读 2018-02-03 21:31:05
    所以类型转换,就是为了告诉编译器这部分内存,应该用什么方式去解释它,如何组织这段内存。 1、C风格类型转换 c语言比较熟悉,指针类型转换很常见。通过圆括号和标识符组成(type) expression。允许任何类型...

    所以类型转换,就是为了告诉编译器这部分内存,应该用什么方式去解释它,如何组织这段内存。

    1、C风格类型转换

    c语言比较熟悉,指针类型的转换很常见。通过圆括号和标识符组成(type) expression。允许任何类型之间的转换过于粗鲁并且在程序语句中难以识别(主要是人工阅读代码可能难以分辨而已,因为C++语法复杂)。所以c++定义了四种类型转换,解决上述缺点。

    2、C++风格类型转换

    使用格式cast-name<type>(expression)
    1、 static_cast
      功能上基本和C风格类型转换一样,含义也相同,但是不能从表达式中去除const属性。

    voidf *p;
    double *dp = static_cast<double *>(p); 

    2、const_cast
      类型转换掉表达式的const属性,将常量对象转换成非常量对象的行为,此时编译器不会阻止用户对该对象写操作。

    const  char *p;
    char *q = const_cast<char *>(p);//正确
    char *pq = static_cast<char *>(p);//错误,只可通过const_cast转换

    3、dynamic_cast
      运行时类型识别,被用于安全地沿着类的继承关系向下进行类型转换。这就是说,你能用dynamic_cast把指向基类的指针或引用转换成指向其派生类或其兄弟类的指针或引用,而且你能知道转换是否成功。失败的转换将返回空指针(当对指针进行类型转换时)或者抛出异常(当对引用进行类型转换时)。它不能被用于缺乏虚函数的类型上,也不能用它来转换掉常量属性。

    class Widget{};//内部含有虚函数
    class SpecialWidget:public Widget{};
    Widget *pw = new SpecialWidget;
    SpecialWidget *psw = dynamic_cast<SpecialWidget *>(pw);//成立
    

    4、reinterpret_cast
      通常用于函数指针之间的转换,这种转换代码移植性很差,最好不使用。

    typedef void (*FUNPTR)();//函数指针类型
    int doSometing();
    FUNPTR funcptr = reinterpret_cast<FUNPTR>(doSometing);//这种转换可以通过编译器,但是我们为什么需要这种垃圾转换了,除非非常理解底层结构。

    2、类型转换函数

    当类型不匹配的时候,C++编译器通常会进行相应的类型转换。

    1. 内置类型隐式转换
      如c++支持char隐式转换成int,short隐式转换double等,这些都是语言特性造成,不受我们控制无法改变。
    2. 自定义类
      当类型不匹配时,编译器也会首先考虑隐式转换但是需要调用对应的转换函数。C++规定两种函数可以作为隐式的类型转换函数:单参数构造函数和隐式类型转换运算符。

    单参数构造函数:是指只用一个参数即可以调用的构造函数。该函数可以是只定义了一个参数,也可以是虽然定义了多个参数但第一个参数以后的所有参数都有缺省值。总之,编译器需要调用对应的函数。

    class Name {
    public:
        Name(const string& s); 
    };
    void Display(Name a);
    string s("Hello Name");
    Display(s);//这里会进行隐式转换,通过Name构造函数生成临时对象,传递进去。

    隐式类型转换运算符:也是一个函数。operator type()

    class Rational {
    public:
    operator double() const; //类型转换运算符,转换Rational类成double
    };
    Rational r(1,2);
    double d = 0.5*r;//编译器自动调用使r转换成double

    3、避免定义类型转换函数

    可能当你在不需要使用转换函数时,这些的函数却会被编译器调用运行。结果这些不正确的程序会出现问题而又无法判断出原因。

    1、首先解决类型转换运算符
      用不使用语法关键字的等同的函数来替代转换运算符,明确调用对应的函数,而避免编译器自动调用。库函数中的string类型没有包括隐式地从string转换成C风格的char*的功能,而是定义了一个成员函数c_str用来完成这个转换。
    2、解决通过单参数构造函数进行隐式类型转换
      C++编译器支持explicit关键字,禁止编译器自动调用相应的构造函数进行隐式转换。暂时理解这个方法即可,其他其淫无比的技巧放放吧。

    template<class T>//模板数组
    class Array {
    public:
        Array(int lowBound, int highBound);//不可做隐式转换函数
        Array(int size);//数组维度,可做隐式转换函数
        T& operator[](int index);
        bool operator==( const Array<int>& lhs,const Array<int>& rhs);
    };
    
    Array<int> a(10),b(10);
    
    if(a == b[i])
    {
    
    }
    /*
    因为隐式转换,出现大问题。b[i]是int类型,a是Array<int>类型。然后调用operator==函数。于是编译器通过构造函数将int转换成Array<int>临时对象,产生错误,致命bug。
    通过explicit关键字声明构造函数,那么这里编译器就会报错,而不会通过。
    */
    展开全文
  • 自动类型转换

    万次阅读 多人点赞 2019-02-01 19:51:57
     在java 程序中,不同的基本类型的值经常需要进行相互类型转换类型转换分为自动类型转换和强制类型转换。布尔类型boolean占有一个字节,由于其本身所代码的特殊含义,boolean类型与其他基本类型不能进行类型的...

    (一)自动类型转换

         在java 程序中,不同的基本类型的值经常需要进行相互类型转换,类型转换分为自动类型转换和强制类型转换。布尔类型boolean占有一个字节,由于其本身所代码的特殊含义,boolean类型与其他基本类型不能进行类型的转换(既不能进行自动类型的提升,也不能强制类型转换), 否则,将编译出错。

        java的所有数值型变量可以进行相互转换,如果系统支持把某种基本类型的值直接赋值给另一种基本类型的变量,则这种方式成为自动类型转换。

         当把一个表数范围较小的数值或变量直接赋给另外一个表数范围比较大的变量时,系统将可以自动类型转换,否则需要强制转换。

        图中箭头左边的数值可以自动转换为右边的数值。

           (2)byte型可以转换为short、int、、long、float和double; 
      (3)short可转换为int、long、float和double; 
      (4)char可转换为int、long、float和double; 
      (5)int可转换为long、float和double; 
      (6)long可转换为float和double; 
      (7)float可转换为double; 

     

    (二)基本类型转换为字符串

    不仅如此,把任何基本类型的值和字符串进行连接运算时,基本类型的值将自动转换成为字符串类型,虽然字符串类型不是基本类型,而是引用类型。因此,如果想将基本类型的值转换为对应的字符串,可以把基本类型的值和一个空字符串进行连接。

     

       (三)强制类型转换

         强制类型转换,即强制显示的把一个数据类型转换为另外一种数据类型。

        如果希望图中箭头右边的类型转换为左边的类型,则必须进行强制类型转换,强制类型转换的格式:

      (targetValuevalue

        强制类型转换的运算符是圆括号,当进行强制类型转换的时候,类似把一个大瓶里的水倒入一个小瓶子,如果大瓶子里的水不多还好,如果大瓶子了的水很多,将会引起溢出,从而造成数据丢失这种转换也被称为缩小转换。

    (四)表达式的自动提升

       当一个算数表达式中包含多个基本类型的值的时候 ,整个算数表达式的数据类型将发生自动提升。java定义了如下的自动提升规则:     1 所有的byte类型,short类型和char类型将被提升到int类型。     2 整个算数表达式的数据类型自动提升到与表达式中最高等级操作数同样的类

    (五)总结

    1    java中整数类型默认是int类型,小数类型默认是double类型。

    2    char可以当做一种特殊的整数类型

    3    int无法转换为boolean

    4    小数类型转为整数类型,小数可能被舍弃,出现精度损失,所以需要强制转换。

    5    boolean 类型不能转换为其它数据类型。

     

     

    展开全文
  • 一、 自动类型转换(隐式类型转换) 整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。 自动转换从低级到高级。 自动转换有以下规律: 1、小的类型自动转化为...
  • JavaScript专题(七)类型转换

    万次阅读 多人点赞 2020-09-23 18:43:46
    类型转换常常为人诟病,但实际上很多时候它们是非常有用的,有些强制类型转换可以明确告诉我们哪里发生了类型转换,有助于提高代码可读性和可维护性。但有些却发生在我们看不见的地方,所以我们今天来讨论一下平时...
  • C++: 隐式类型转换和显式类型转换

    千次阅读 2019-11-06 12:49:44
    1) 算术转换(Arithmetic conversion) : 在混合类型的算术表达式中, 最宽的数据类型成为目标转换类型。 intival=3; doubledval=3.14159; ival+dval;//ival被提升为double类型 2)一种类型表达式赋值给另一种类型的...
  • c++类型转换

    万次阅读 多人点赞 2019-05-29 19:45:08
    c 风格的转换的格式很简单(TYPE) EXPRESSION,但是 c 风格的类型转换有不少的缺点,有的时候用 c 风格的转换是不合 适的,因为它可以在任意类型之间转换,比如你可以把一个指向 const 对象的指针转换 成指向非 ...
  • PostgreSQL 数据类型转换类型转换的三种格式
  • 在我们学习c语言的时候,就知道强制类型转换和隐式类型转换,但是在类型转换的过程中,很有可能一个不注意,容易出问题,这无疑是加大了,程序员的工作量,而且还检查很不好检查。 所以在c++ 中就对类型转换做...
  • JS类型转换

    千次阅读 2018-09-25 17:38:57
    1.强制类型转换 强制类型转换指将一个数据类型强制转换成另一种数据类型类型转换主要指将其他的数据类型转换成String Number Boolean。 (1)将其他数据类型转换成String类型 方法一:调用被转换类型的toString()...
  • JAVA中显式类型转换和隐式类型转换

    千次阅读 2018-07-27 16:00:05
    自动类型转换(隐式类型转换),由系统自动完成的类型转换。从存储范围小的类型到存储范围大的类型。由于实际开发中这样的类型转换很多,所以Java语言在设计时,没有为该操作设计语法,而是由JVM自动完成。 转换...
  • java类型转换

    千次阅读 2018-07-02 15:27:03
    类型转换Java中的类型转换可以分为13种,1 标识转换 是最简单的就是同种类型之间的转换。2 拓展简单类型转换 拓展简单类型转换涉及到基本数据类型,比如byte转换为short,int,long,float,double;short转换为int,long...
  • 数据类型转换,分为自动转换和强制转换。 自动转换: 程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换(低精度-&amp;gt;高精度 转换)。 强制类型转换: 则...
  • 1、基础类型转换(string转number类型,number转string类型) class TypeChange { constructor() { this.print(); } age: number = 20; ageStr: string = "20"; ageNull: string; public print...
  • C++ 类型转换

    千次阅读 多人点赞 2017-08-17 19:03:25
    隐式类型转换 1 数值类型转换 2 指针类型转换 显式类型转换 1 explicit关键字 1 强制类型转换 11 static_cast 12 dynamic_cast 13 const_cast 14 reinterpret_cast 参考资料 C++类型转换大体上包括隐式类型转换和...
  • java自动类型转换与强制类型转换

    千次阅读 2018-02-03 16:41:40
    自动类型转换就是自发的进行,你可以从输出的结果看出,外表是看不出来的。我们知道数据类型有很多种,大小也不一样,就像水桶似的,有1升的,2升的,4升的,自动类型转换就相当于把小的水桶里面的水装到大的里面去...
  • Java基本数据类型转换与java基本类型转换优先级转换类型1. 自动类型转换: 编译器自动完成类型转换,不需要再程序中编写代码转换规则: 从存储范围小的类型到存储范围大的类型具体规则 : byteàcharàshortàintàlong...
  • Java:自动类型转换和强制类型转换的规则

    万次阅读 多人点赞 2017-07-27 19:27:48
    自动类型转换规则: 强制类型转换: 代码示例: package com.jredu.ch02; public class Ch04 { public static void main(String[]args){ //自动类型转换 //基本数据的自动类型转换只有7种...
  • go类型转换及与C的类型转换

    千次阅读 2018-11-06 19:01:26
    文章目录GO类型转换及与C的类型转换类型转换类型断言其他转换bytes 、string转换interface转为stringstring与unicode字符互转go和c类型装换 GO类型转换及与C的类型转换 类型转换 语法 dst := float32(src) 示例 var...
  • JS数据类型转换

    万次阅读 多人点赞 2019-06-23 14:48:41
    首先我们要知道,在 JS 中类型转换只有三种情况,分别是: 转换为布尔值 转换为数字 转换为字符串 我们先来看一个类型转换表格,然后再进入正题 转Boolean 在条件判断时,除了 undefined, null, false, NaN, ...
  • C#中自定义类型转换

    千次阅读 2018-01-19 18:55:58
    类型转换
  • Scala类型转换

    千次阅读 2019-06-12 09:36:18
    类型隐式转换 自动类型转换说明 object TypeDemo8 { def main(args: Array[String]): Unit = { var n1 = 10 var n2 = 1.1f // float var n3 = n1 + n2 println(n3.isInstanceOf[Float]) } } object...
  • Java 类型转换

    万次阅读 多人点赞 2019-05-17 08:11:26
    一、自动类型转换(隐式类型转换) 整型、实型(常量)、字符型数据可以混合运算。不同类型的数据先转化为同类型再进行运算 自动转换按从低级到高级顺序: char ↓ Byte→short→int→long---›float→double ...
  • C#的隐式类型转换和显式类型转换

    千次阅读 2017-09-20 16:49:08
    C#的隐式类型转换和显式类型转换 C#的隐式类型转换  在C#语言中,一些预定义的数据类型之间存在着预定义的转换。比如,从int类型转换到long类型。C#语言中数据类型转换可以用分为两 类:隐式转换...
  • 类型转换 JS 数据类型 通过函数进行类型转换 String Number 之间的想换转换 自动类型转换 目录导航 类型判断 typeof JS 中可以使用关键字 typeof 判断 demo typeof "hello" typeof ...
  • 把int类型转为short类型推翻了转换类型中的,大转小的理论,其实不然。与float f = 3.4 中double float转为float 大转小报错,展开深入研究。 2.基本1.Java类型转换 Java类型转换分为自动转换和强制转换两种。 ...
  • 1.类型转换原理 类型转换是struts拦截器来实现的。 类型转换的意思是能够把参数转换成action里面所需要的类型转换不了可以使用自己写的转换器(但几乎不用自己写)。 在struts的传参过程中,我们已经不知不觉的在...
  • 由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况: 主要以下几种转换方法,供参考: 一、强制类型转换 [java] longll=300000; intii=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,481,787
精华内容 992,714
关键字:

类型转换