美文网首页
Boolan-C++面向对象高级编程 学习笔记(四)

Boolan-C++面向对象高级编程 学习笔记(四)

作者: FishParadise | 来源:发表于2018-01-28 14:41 被阅读0次

    这周的部分感觉相对繁杂,函数模板方面零零散散,所以这次的笔记就围绕转换函数来整理。

      类型转换操作符(type conversion

    operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换。转换操作符在类定义的体内声明,在保留字operator之后跟着转换的目标类型。转换函数又称类型强制转换成员函数,它是类中一个非静态成员函数。

      定义格式:

    class <类型说明符1>  

       {  

    public:  

         operator <类型说明符2>();  

         …  

       }  

      这个转换函数定义了由类型说明符1到类型说明符2之间的映射关系。

      转换函数是用来将一种类型的数据类型转换成另一种类型。

      operator用于类型转换函数:

      转换函数特质:

      1.类型转换函数定义在源类中。

      2.需要用operator修饰,函数名称是目标类型名后目标类名。

      3.函数没有参数,没有返回值,但是有return语句,在return语句中返回目标类型数据或调用目标类的构造函数。

      类型转换函数主要有两类;

      1.对象向基本数据类型转换(例):

    #include  

    #include  

    using namespace std;  

    class D{  

    public:  

    D(double d):d_(d) {}  

    operatorint() const{  

    std::cout<<"(int)d called!"<

    return static_cast(d_);  

     }  

    private:  

    double d_;  

    };  

    int add(int a,int b){  

    return a+b;  

    }  

    int main(){  

     D d1=1.1;  

     D d2=2.2;  

     std::cout<

    system("pause");  

    return 0;  

    }  

    输出结果为:

    d called!  

    d called!  

    3  

    可见在add(d1,d2)函数调用时隐性的调用了operator int()const函数。

      2.对象向不同类的对象转换(例):

    #include  

    class X;  

    class A  

    {  

    public:  

    A(int num=0):dat(num) {}  

    A(const X& rhs):dat(rhs) {}  

    operatorint() {return dat;}  

    private:  

    int dat;  

    };  

    class X  

    {  

    public:  

    X(int num=0):dat(num) {}  

    operatorint() {return dat;}  

     operator A(){  

      A temp=dat;  

    return temp;  

     }  

    private:  

    int dat;  

    };  

    int main()  

    {  

      X stuff=37;  

      A more=0;  

    int hold;  

      hold=stuff;  

      std::cout<

      more=stuff;  

      std::cout<

    return 0;  

    }  

    程序中的X通过“operator A()”类型转换来实现将X类型对象转换成A类型。

      operator用于操作符重载:

      操作符重载将现有操作符与一个成员函数相关联,并将该操作符与其他成员对象一起使用。

      需要注意的是,重载不能改变操作符的基本功能,一级该操作符的优先级顺序。不应改变操作符的本来含义,且只能对已有的操作符进行重载,而不能重载新符号。操作符重载只对类可用。以下运算符不能被重载:

    相关文章

      网友评论

          本文标题:Boolan-C++面向对象高级编程 学习笔记(四)

          本文链接:https://www.haomeiwen.com/subject/cjzaaxtx.html