zoukankan      html  css  js  c++  java
  • C++转换构造函数与类型转换构造函数

    转换构造函数:

     转换构造函数的只有一个形参:

    1 Student(float s)
    2 {
    3     score = s;
    4     age = 0;    
    5 }

     如果已经在上面定义了构造函数:

    1 Student(85);        //建立对象c1,由于只有一个参数,调用转换构造函数

    如果对“+”进行了重载,那么以下是编译错误的:

    1 stu2 = stu1 + 85;        //这样编译错误
    2 stu2 = stu1 + Student(85);    //合法,将85转换为Student类对象

    注意:在已定义的相应的转换构造函数情况下, 将运算符“+”函数重载为友元函数,在进行两个复数相加时,可以用交换律; 

       如果是重载为成员函数的话,那么交换律不适用;

    类型转换构造函数:

    用转换构造函数可以将一个类型数据转换成类的对象,但不能将一个类的对象转换成一个类型数据;因此我们需要另一种方法来实现这种功能:

    C++提供了类型转换函数来解决这种问题:

    1 operator float()
    2 {
    3     return score;
    4 }

     下面是一个使用类型转换的简单例子:

     1 class Student
     2 {
     3     private:
     4         float score;
     5         int age;
     6     public:
     7         Student(void){age = 18;  score = 0;}
     8         Student(int a, float s){age = a; score = s;}
     9         operator float(){return score;}
    10 };
    11 
    12 int main()
    13 {
    14     Student stu1(18,  86), stu2(18, 97.5);
    15     float f;
    16     f = 6.75 + stu2;        //当需要的时候,编译器会自动调用这些函数
    17     cout << f << endl;
    18     return 0;
    19 }    
    20 /*
    21 运行结果:
    22 104.25
    23 Press any key to continue
    24 */

     编译器系统发现有对float的重载,因此调用了这个函数;

    注意:operator前面没有参数。

  • 相关阅读:
    Ubuntu 18.04 安装博通(Broadcom)无线网卡驱动
    Python3漏洞扫描工具 ( Python3 插件式框架 )
    Linux 防火墙
    基于Python3的漏洞检测工具 ( Python3 插件式框架 )
    git学习笔记
    sublime text 3 优化配置
    win10 出现0x80072efd错误
    Ubuntu搭建NFS服务器,NFS协议详细分析
    docker实现跨主机连接
    Python-RabbitMQ(持久化)
  • 原文地址:https://www.cnblogs.com/linhaostudy/p/5676864.html
Copyright © 2011-2022 走看看