怎样重载强制类型转换操作符

我们知道C++支持对操作符的重载,但强制类型转换的重在格式和普通的操作符重载有几分不同。操作符的重载,在上一篇中,我们已经详细的讨论过,现在,我们就来看看如何重载一个强制类型转换的操作符。
    class mydouble
    {
    public:
        mydouble(double d)
        {
            m_data = d;
        }
        operator float() // 重载针对float的强制类型转换
        {
            return (float)m_data;
        }
        operator int() // 重载针对int的强制类型转换
        {
            return (int)m_data;
        }

    private:
        double m_data;
    };
    这是一个非常简单的例子,不过它已经足以描述我要说明的问题。假如,我们有如下的一个函数:
    print(int n)
    {
        printf("%d\n", n);
    }
    当我们如下来使用mydouble的时候:
    mydouble dbl(234.33);
    print(dbl); // 注意此处正隐式调用了operator int()函数
    我们所定义的int型强制类型转换就会被调用。
    我们看到,强制类型转换的操作符重载,很不符合我们的习惯。通常,函数都是需要定义一个返回类型的,不过,对于强制类型转换的操作符重载函数来说,因为我们已经知道它所需要获得的类型,从而就不再追加这样的一个累赘,而是将函数名与返回类型合并,给出一个简洁的形式。
    强制类型转换,在函数调用的时候经常会被用到,而用的最为频繁的,估计会是CString类中的LPCTSTR强制类型转换。这个函数返回的是字符串的指针,从而可以使很多需要提供字符串的函数,可以直接传入CString的对象,比如下面的例子:
    char sz1vName[64] = {0};
    CString str("Tian");
    strcpy(sz1vName, str); // 其实,此时调用了强制类型转换,将str转换成一个const char*的指针
    显然,强制类型转换所带来的好处是不言而喻的,并且,实现它们也并不那么困难,那么我这里有一个思考题:为什么printf函数可以向下面那样使用呢?它使用了强制类型转换了吗?
    printf("My name is %s\n", str);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值