精华内容
下载资源
问答
  • C++自动类型转换

    2017-11-30 21:35:45
    C++中,如果编译器看到一个表达式或函数调用使用了一个不合适的类型,它会执行一个自动类型转换,将不合适的类型转换为合适的类型。对于自定义类,可以通过定义该类的构造函数的方法将其它类型转换为本自定义类;...

    C++中,如果编译器看到一个表达式或函数调用使用了一个不合适的类型,它会执行一个自动类型转换,将不合适的类型转换为合适的类型。对于自定义类,可以通过定义该类的构造函数的方法将其它类型转换为本自定义类;或者使用运算符将本自定义类转换为其它类型。

    1 定义构造函数将其它类型转换为本类型

    对于一个自定义类,可以为该类定义一个有一个参数的构造函数。则编译器可以将这个函数对应的类型转换为该自定义类类型。

    1.1自动转换例子

    首先,定义一个名为MyClass的类,该类包含一个有一个参数的构造函数。

    class MyClass
    {
    public:
    int i;
    public:
    MyClass(int ii)
    {
    i = ii;
    }
    };

    接下来定义一个名为MyFunc()的函数,该函数的参数是自定义MyClass类的对象。

    int MyFunc(MyClass myclass)
    {
    return myclass.i;
    }
    函数的返回值是MyClass类对象的成员变量i

    最后,在main()函数中,执行如下代码

    int result = MyFunc(1);
    整型变量result的值是1。因为MyFunc()函数的参数是MyClass类的对象,当MyFunc()函数的参数是int类型时,编译器检查是否可以从int类型转换为MyClass类型,结果发现可以通过MyClass的构造函数MyClass(int ii)这种方式实现转换。所以,在以上代码中,MyClass::MyClass(int ii)函数首先被调用,编译器将int类型转换为MyClass类型之后,再调用MyFunc(MyClass myclass)函数将MyClass类对象的成员变量i的值作为返回值返回。

    1.2 禁止自动转换

    如果需要禁止这种通过构造函数的自动转换,则需要使用explicit关键字对MyClass类的构造函数进行修饰。

    class MyClass
    {
    public:
    int i;
    public:
    explicit MyClass(int ii)
    {
    i = ii;
    }
    };

    此时,在main()函数中,如下代码

    int result = MyFunc(1);
    在编译时就会报错,其报错信息为error C2664: int MyFunc(MyClass): 无法将参数 1 从“int”转换为“MyClass””。此时就无法再通过构造函数实现类型的自动转换了。

    此时,只需将调用MyFunc()函数的代码改为如下即可

    int result = MyFunc(MyClass(1));

    2 使用运算符将本自定义类转换为其它类型

    仍以1定义构造函数将其它类型转换为本类型”中提到的MyClass类为例,可以为该类定义一个运算符,通过该运算符,将该类型的对象转换为其它类型。

    class MyClass
    {
    public:
    int i;
    public:
    explicit MyClass(int ii)
    {
    i = ii;
    }
    operator int() { return i; }//运算符重载
    };
    通过operator关键字重载了运算符,但是该运算符重载的方式比较特别,因为没有指定一个返回类型。其实,使用本方法重载的运算符返回类型就是运算符的名字。在MyClass类中重载的运算符的返回值是int,通过该重载的运算符,可以将MyClass类型转换为int类型。

    接下来定义一个名为MyFunc2()的函数,该函数的参数是int类型。

    int MyFunc2(int i)
    {
    return i;
    }
    main()函数中,有如下代码

    int result2 = MyFunc2(MyClass(1));

    此时,虽然MyFunc2()函数的形参类型是int,而实参类型是MyClass,但是由于为MyClass类重载了自动类型转换运算符,所以该代码能够正常运行,result2的值是1

    展开全文
  • c++自动类型转换

    2010-08-10 09:25:00
    class A {  A(CString s); }   class B {  CString funcStr(const A& a); }   B b;   CString s = L"Hello World!";   b....

    class A

    {

          A(CString s);

    }

     

    class B

    {

           CString funcStr(const A& a);

    }

     

    B b;

     

    CString s = L"Hello World!";

     

    b.funcStr(s);

     

     

    调用成功!

    展开全文
  • c/c++自动类型转换

    2017-01-05 11:11:36
    ->不同类型数据间的混合运算中的自动类型转换。  当一个表达式中有不同的数据类型参加时,默认情况下会进行自动类型转换。转换过程当中以运算中最高级别为准。    其中横向箭头是必定发生的转换。纵向箭头是可以...
    学习各种语言,必须要有扎实的基础知识。C和C++有很多灵活性的东西,所以在编程时一定要牢记这些知识点。
    ->不同类型数据间的混合运算中的自动类型转换。
        当一个表达式中有不同的数据类型参加时,默认情况下会进行自动类型转换。转换过程当中以运算中最高级别为准。
            
         其中横向箭头是必定发生的转换。纵向箭头是可以直接越级的。另外必定发生的转换是因为数据长度的不同的,计算的时候目的是为了保证精度。

    举例:
           int a = - 20;
           unsigned char b = 20;
           unsigned int c = 20;
           int d = 0;

        (1)   d = a/b ;//结果是-1
        (2)   d = a/c ;// 结果你可能想不到,可以自己试验,当然这里整数除法还要考虑到余数的舍去问题
        (3)   d = a/(int)c;//结果是-1
    这个例子中式(1)中b是自动转换成int型的,横向的转换。式(2)的问题是unsigned int 实际比int级别要高,所以进行了自动转换,将a转换成了无符号型,如果这个值是正值,这里不会有问题,但是负值就有问题了。所以式(2)要改写成式(3)的样式,即进行强制转换。
        
    强制类型转换相对直白,但是必须注意转换中可能会丧失的有效字节。其实这种转换是不安全的。
           




             
    展开全文
  • ...(1)将vector1对象转换为double类型与double类型的c相加,再赋值给total对象。 (2)将c通过隐式构造成为Vector类对象,再利用友元函数或成员函数(Vector operator+(Vector&))进行相加。
    #include<iostream>
    #include<string>
    #define mian main
    #define vodi void
    
    class Vector 
    {
    	double x, y;
    public:
    	void show() const;
    	Vector operator-();
    	Vector operator+(Vector&);
    	friend bool operator>(const Vector&, const Vector&);
    	//operator double() const;
    	friend Vector operator+(const Vector&, const Vector&);
    	Vector(); //默认构造函数
    	Vector(double, double); //构造函数
    	Vector(double);
    };
    
    int main()
    {
    	using namespace std;
    
    	string str1 = "1";
    	string str2 = "2";
    	Vector vector1(2, 3);
    	Vector vector2(3, 4);
    	bool comp;
    
    	comp = str1 < str2;
    	cout << comp << endl;
    
    	return 0;
    }
    
    Vector::Vector(double a, double b)
    {
    	x = a;
    	y = b;
    }
    
    Vector::Vector() { double x = y = 0; }
    
    Vector::Vector(double a)
    {
    	x = a;
    	y = 0;
    }
    
    /*Vector::operator double() const
    {
    	return ((double)x);
    }*/
    
    vodi Vector::show() const
    {
    	using namespace std;
    	cout << "( " << x << ", " << y << " )" << endl;
    }
    
    Vector Vector::operator-()
    {
    	return Vector(-x, -y);
    }
    
    Vector Vector::operator+(Vector& add)
    {
    	Vector Ad;
    	Ad.x = x + add.x;
    	return Ad;
    }
    
    bool operator>(const Vector& v1, const Vector& v2)
    {
    	if (v1.x > v2.x)
    		return true;
    	else
    		return false;
    }
    
    Vector operator+(const Vector& f1, const Vector& f2)
    {
    	Vector Temp;
    	Temp.x = f1.x + f2.x;
    	Temp.y = f1.y + f2.y;
    	return Temp;
    }

    用到运算符重载时候,如同程序所示,使用加法

    total = vector1 + c;

    如果同时存在单个参数的构造函数和重载double,即

    Vector(double);
    operator double() const;

    那么将会造成上述加法语句的二义性,导致编译错误。

    编译器认为上述加法可以:

    (1)将vector1对象转换为double类型与double类型的c相加,再赋值给total对象。

    (2)将c通过隐式构造成为Vector类对象,再利用友元函数或成员函数(Vector operator+(Vector&))进行相加。

    展开全文
  • vector_t(float aX=0.0f, float aY=0.0f,float aZ=0.0f): x(aX),y(aY),z(aZ){} ... vector_t v1,v2; ... ...通过调试发现有一次构造函数的调用,这才想起来C++自动类型转换。 差笔记得:
  • 在赋值语句中,= 右边的值在赋予 = 左边的变量之前,首先要将右边的值的数据类型转换成左边变量的类型。也就是说,左边变量是什么数据类型,右边的值就要转换成什么数据类型的值。这个过程可能导致右边的值的类型...
  • C++自动类型转换

    2021-01-13 21:55:14
    上节讲的强制类型转换,有点暴力的倾向,今天讲个温柔点的类型-----自动类型转换。 暴力类型转换,哦,不对。 强制类型转换好比是把面团放进机器里,转换成面条; 自动类型转换像是变魔术,把给定的类型转换成预想的...
  • c++重载自动类型转换

    2018-06-21 19:48:37
    所谓重载自动类型转换,就是用户自己定义类的自动转换方式。。。。、 我越来越懒了,直接贴代码吧。 operator type(){ //type为 `转换到的类型` //不需要指定返回值类型,因为返回的肯定是 `要转换到的类型` } ...
  • c++ 隐式类型转换

    千次阅读 多人点赞 2018-12-25 17:14:32
    这是指c++自动将一种类型转换成另一种类型,是编译器的一种自主行为。 为什么c++需要隐式类型转换? c++多态的特性,就是通过父类的对象实现对子类的封装,以父类的类型返回之类对象。 c++中使用父类的地方一定可以...
  • 将一个标准类型变量的值赋给另一种标准类型的变量时,如果这两种类型兼容,则C++自动将这个值转换为接受变量的类型。 double time = 11; //int value 11 converted to type double 利用构造函数将typename->类 ...
  • (1)如果有一个操作数的类型是long double,则将另一个操作数转换为long double。 (2)否则,如果有一个操作数的类型是double,则将另一个操作数转换为double。 (3)否则,如果有一个操作数的类型是float,则将...
  • c++ 自动应用类型转换

    2016-08-14 11:41:00
    c++中,在赋值时如果类型不匹配,就会应用到:类型转换类型转换又分为隐式转换(implicit conversion) 和 显式强制类型转换(emplcit conversion)。在这我围绕着类的情况展开来说。 类中的类型转换,离不开...
  • C++ 强制类型转换

    2020-01-13 16:48:54
    文章目录C++ 类型转换1. 隐式类型转换2. 强制类型转换2.1 C式强制类型转换2.2 static_cast类型转换 ...隐式类型转换是编译器自动执行的,当编译器发现类型不一致的时候,就会自动隐式类型转换(当时是在...
  • C++类型转换

    2019-07-19 08:42:16
    C++类型的转换可以分为显式转换和隐式转换两种,显示转换是指通过类型转换函数对类型进行转换,隐式类型转换是指由编译器自动生成的转换。隐式转换的前提是存在合理的转换对象。 l隐式类型转换发生的场合——build-...
  • c++类型转换

    2017-02-02 11:16:50
    c++自动类型砖 c++轻质类型转换
  • C++类型转换

    2020-06-30 10:58:02
    C++中,存在隐式类型转语法(自动类型转换) int a = 12; a = 22.5 + a; C++还提供了显式类型转换语法(强制类型转换) 类型名(变量) int num = int(99.5); C语言采用的语法格式 int num = (int)99.5; 注意: 1...
  • C++强制类型转换

    2021-04-24 10:34:51
    目录C语言的强制类型转换C++的强制类型转换static_castdynamic_castconst_castreinterpret_cast C语言的强制类型转换 一般形式 (类型说明符)(表达式) 功能 把表达式的运算结果强制转换成类型说明符所表示的类型。 ...
  • 自动类型转换指在算术运算以及在赋值过程中,如果运算符两边的操作数属于“类型相容”(指类型不同但系统可以自动进行转换)的情况,如整数、字符和实数之间,系统会自动进行类型转换,然后再做运算。包括:算术类型...
  • C++类型自动转换

    2020-12-22 16:48:38
     2,用一种类型的表达式值赋值给另一种类型的变量,表达式的值会自动转换成被赋值变量的类型,然后再执行赋值操作。  3,形参和实参类型不一致时,实参会变成形参的类型,再复制给形参匿名空间。  4,当函数...
  • c++ 强制类型转换

    2019-09-27 12:38:57
    前言 在c语言中学的强制转换是用()来实现的; 而在c++中更多的是用case-name系列的关键字来告诉编译器我们需要转换的类型. c++引入这些关键字也是为了看代码的时候... 将原有的自动类型转换 , 如 : short转为int, ...
  • C++ 类型转换

    千次阅读 2017-08-17 19:03:25
    隐式类型转换 1 数值类型转换 2 指针类型转换 ...C++类型转换大体上包括隐式类型转换和显式类型转换。1. 隐式类型转换隐式类型转换自动执行的,无需显式的操作符。 隐式类型转换发生在很多地方,比如函数
  • C++类型转换

    2021-03-04 18:11:37
    C++中,有隐式类型转换语法(自动类型转换) int a=11; a=1.23+a; 在C++中,有显式类型转换语法 格式: 类型名(变量名); 例: int a=int(99.2); 在C中,有显式类型转换语法 格式:(类型名)变量名; 例: int num=(int)...
  • C++变量类型相互转换自动转换和强制转换) 首先、作为一个职场小白,在此分享一下自己学习C++的一些心得体会,有问题大家可以留言区评论。如有错误,会马上纠正。 步入正题,今天要说的是C++中变量类型的相互...
  • C/C++自动类型转换

    2015-07-15 23:28:51
    自动类型转换规则:1) 若参与运算量的类型不同,则先转换成同一类型,然后进行运算。2) 转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。1.若两种类型的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,442
精华内容 976
关键字:

c++自动类型转换

c++ 订阅