类型强制

博客介绍了类型强制,即一种类型的值映射为另一种类型的值。重点阐述构造函数的类型强制特性,当表达式需要T类型操作数,而提供U类型操作数时,编译器能利用特定构造函数建立T类型操作数。还通过代码示例展示了函数调用时编译器进行类型强制的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     类型强制将一种类型的值映射为另一种类型的值,类型之间的这种映射关系是在定义类型时指定的。构造函数的类型强制特性:

      设T类有如下形式的构造函数:

      T::T(U)

      T::T(const U&)

      这个构造函数创建一个T类型的对象,这个对象使用U类型的值来初始化。当在一个表达式中需要T类型的操作数,而程序员却提供了U类型的操作数,编译器能自动的使用这个构造函数由U类型的操作数建立一个T类型的操作数,所以,这种形式的构造函数具有类型强制作用。例如:

         file://myclass.h

         #include<iostream.h>

         class MyClass

         {public:

                MyClass(int i=0);

                void Print() const;

                 ~MyClass();

            private:

                 int m;

};

           file://myclass.cpp

           #include "myclass.h"

           MyClass::MyClass(int i )

          {m=i;

            cout<<"Constructor called."<<m<<endl;}

           void MyClass::Print() const

          {cout<<m<<endl;}

           MyClass::~MyClass()

           {cout<<"Destructor called."<<m<<endl;}

          现在考察下面的程序。在这个程序中,函数fun()带有一个引用参数,但在调用函数fun时,所使用的实参不是一个同类型的左值表达式。

          #include <iostream.h>

         #include "myclass.h"

         void fun(const MyClass& c);

         int main()

        {fun(5);

          return 0;}

         void fun(const MyClass& c)

        {c,Print();}

         程序的运行结果为:

         Construct Called. 5

          5

          Destruct Called. 5

           函数fun()使用了基类型为MyClass的引用参数,它要求它的调用者在调用该函数时提供类型为MyClass的操作数,但我们的程序中,实参的类型为int,所以,编译器生成有关的代码进行类型强制,强制的结果是在main()函数中(强制发生的环境中)建立了一个MyClass类型的匿名对象,形参c引用到该匿名对象上。

      

 

 

           

            

 

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值