关于C++转换函数

5 篇文章 0 订阅
1 篇文章 0 订阅

关于C++转换函数

假如我们定义了一个类myclass
myclass类头文件

#pragma once
#ifndef TIME_H_
#define TIME_H_
#include "stdafx.h"
#include <iostream>
using namespace std;
class Myclass
{
private:
    double data;
public:
    Myclass(double data);
    void Show();
};
#endif

myclass类源文件

#include "stdafx.h"
#include "Time.h"
#include <iostream>

Myclass::Myclass(double data)
{
    this->data = data;
}

void Myclass::Show()
{
    cout << data << endl;
}

我们可以这样编写代码
Myclass classone;
classone = 2.37;

程序将使用构造函数Myclass(double)来临时创建一个Myclass对象,并将2.37隐式地转换.
这样的自动特性有时候并非合乎需要的,因为这会导致意外的类型转换.因此C++新增了关键字 explicit,用于关闭这种特性.
也就是说可以这样声明构造函数(注意源文件中不能有explicit关键字)
explicit Myclass(double data);
这样写后 类似 Myclass classone = 2.37;这样的代码编译将不通过
但是虽然关闭了隐式的转换,但是仍然允许显示的转换,如:
Myclass classone;
classone = Myclass(2.37);
或者classone = (Myclass)2.37;

问题提出:
以上都是将数字转换为MyClass对象,那么我们可以相反的转换吗?
也就是说,是否可以将Myclass对象转换为double 值呢/
Myclass classthree(8.39);
double test = classone;
答案是可以这样做的,但不是使用构造函数.构造函数只用于从某种类型到类型的转换.要进行相反的转换,必须使用特殊的C++运算符函数—–转换函数.
我们需要这种形式的转换函数 : operator typeName();
注意:

  • 1.转换函数必须是类的方法
  • 2.转换函数不能指定返回类型
  • 3.转换函数不能有参数

例如,转换double类型的函数的原型如下(在末尾加上 const也行):
在头文件中声明:
operator double() const;
在源文件中定义:
Myclass::operator double() const
{
return data;
}

通过这样的方法,我们就可以将Myclass对象转换为double值.
掌握了这些技术,我们可以在上一节运算符重载中使用类型转换使代码更简洁.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值