C++运算符重载(6) - 转换操作符

本文探讨了C++中利用类抽象现实世界,特别关注复数类的实现及转换操作符的使用,提供了两种打印复数绝对值的方法,并强调了遵循最佳实践的重要性。

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

C++利用类做为具体类型来抽象现实世界。有时需要隐式地将一个具体类型转换为另一个具体类型,或转换为原始类型。此时就需要用到转换操作符。

参考下面例子:

#include <iostream>
#include <cmath>
using namespace std;

class Complex {
private:
    double real;
    double imag;
public:
    // 默认构造函数
    Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
    // 求复数的绝对值
    double mag() { return getMag(); }
    // 转换操作符
    operator double() { return getMag(); }

private:
    // get magnitude
    double getMag() {  return sqrt(real * real + imag * imag); }
};

int main() {
    // 定义一个复数对象
    Complex com(3.0, 4.0);

    // 打印magnitude,可以使用下面的两种方法
    //方法1
    cout << com.mag() << endl;
    //方法2
    cout << com << endl;
}

运行结果:
5
5

可以使用两种方式来打印复数的绝对值。
不过,一般来说,应该避免使用方法2。应该让编译器在基于类型来调用合适的函数上有更多控制权,而不是程序员自己期望调用哪个函数(这里的转换操作符函数中指定调用getMag函数)。
更好的实践是采用特定的成员函数来实现这样的转换。只是有时为了适应C的一些库程序,不得已才这样使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水草

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值