LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 159|回复: 0

转换构造函数

[复制链接]
发表于 2024-2-3 23:11:44 | 显示全部楼层 |阅读模式
转换构造函数定义了从用户定义的类型或内置类型到用户定义的类型的转换。 以下示例演示了从内置类型 double 转换为用户定义的类型 Money 的转换构造函数。

#include <iostream>

class Money
{
public:
    Money() : amount{ 0.0 } {};
    Money(double _amount) : amount{ _amount } {};

    double amount;
};

void display_balance(const Money balance)
{
    std::cout << "The balance is: " << balance.amount << std::endl;
}

int main(int argc, char* argv[])
{
    Money payable{ 79.99 };

    display_balance(payable);
    display_balance(49.95);
    display_balance(9.99f);

    return 0;
}
请注意,对函数 display_balance 的首次调用(它将采用类型 Money 的自变量)不需要转换,因为它的自变量类型正确。 但是,在第二次调用 display_balance 时需要转换,因为参数类型(带有值 49.95 的 double)并非该函数所期望的参数类型。 该函数不能直接使用此值,但是由于存在从参数类型 (double) 到匹配的参数类型 (Money) 的转换,因此类型 Money 的临时值将通过该参数进行构造并将用于完成该函数调用。 在对 display_balance 的第三次调用中,请注意,参数不是 double 而是带有值 9.99 的 float,但仍可以完成此次函数调用,因为编译器可以执行标准转换(在此案例中,执行从 float 到 double 的标准转换),然后执行从 double 到 Money 的用户定义的转换,以完成必要的转换。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表