关于C++转换函数

原创 2015年11月17日 18:50:56

关于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值.
掌握了这些技术,我们可以在上一节运算符重载中使用类型转换使代码更简洁.

相关文章推荐

C++ Convert 多种字符转换函数

  • 2017年09月22日 10:59
  • 2KB
  • 下载

浅谈C++中强制类型转换函数

  • 2015年05月19日 17:46
  • 61KB
  • 下载

C/C++字符串转换到数字的函数

C/C++字符串转换到数字的函数 C/C++标准库stdlib.h中提供了字符串到数字的转换。 一、头文件 [cpp] view plaincopy #in...
  • haiross
  • haiross
  • 2015年05月15日 16:05
  • 972

c++钱的小写转换为大写的函数

  • 2012年08月24日 17:00
  • 355B
  • 下载

C++ 通信常用转换函数汇总

  • 2012年09月05日 11:50
  • 21KB
  • 下载

C++实现unicode码转换成UTF-16的加码和解码函数

Unicode的实现方式不同于编码方式。一个字符的Unicode编码是确定的,但是在实际存储和传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对Unicode编码的实现方式有所不...

C++ Primer学习笔记——$14 操作符重载、函数对象及类类型转换

题记:本系列学习笔记(C++ Primer学习笔记)主要目的是讨论一些容易被大家忽略或者容易形成错误认识的内容。只适合于有了一定的C++基础的读者(至少学完一本C++教程)。  作者: tyc611,...
  • whycold
  • whycold
  • 2011年01月19日 15:09
  • 730

【c++】实例演示类继承中派生类到基类的转换及虚函数

刚刚编辑好的内容没保存,现在只好重新码。。。 对类继承中牵扯到指针指向类对象的调用以及有虚函数的时候一直既不牢固,于是自己编了一个实例来加深印象。 实例很简单,定义一个基类和子类,基类有两个函数tal...

More Effective C++之Item M5:谨慎定义类型转换函数

C++编译器能够在两种数据类型之间进行隐式转换(implicit conversions),它继承了C语言的转换方法,例如允许把char隐式转换为int和从short隐式转换为double。因此当你把...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于C++转换函数
举报原因:
原因补充:

(最多只允许输入30个字)