CSDN博客

img cl007

类型强制

发表于2001/7/3 22:03:00  804人阅读

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

      设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引用到该匿名对象上。

      

 

 

           

            

 

     

0 0

相关博文

我的热门文章

img
取 消
img