关于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++进制转换函数小结

atof(将字符串转换成浮点型数)                      atoi(将字符串转换成整型数)                 atol(将字符串转换成长整数数)           ...
  • sunboyiris
  • sunboyiris
  • 2014年04月06日 09:14
  • 2521

C/C++里自带提供的整数进制转换的几种方式

一、输出格式化 (1)在C里 printf函数提供的有各进制的格式化参数,比如%o,%x就分别表示格式化为八进制和十六进制 printf("%o",i); 与 ...
  • mzlogin
  • mzlogin
  • 2009年04月08日 14:35
  • 7455

C++主题——转换函数

C++主题——转换函数 转换函数的基本规则:        转换函数只能是成员函数,无返回值,空参数。        不能定义到void的转换,也不允许转换成数组或者函数类型。        转换常定...
  • Xscarlet
  • Xscarlet
  • 2007年04月13日 16:01
  • 2982

C++中的类型转换函数

C++中的类型转换函数
  • u012333003
  • u012333003
  • 2014年03月11日 10:22
  • 1610

C++之基本数据类型转换和转换函数

C++语言中类型转换有两种:隐式转换和强制转换。在类型转换的过程中还有保值转换和非保值转换之分。保值转换是安全的,数据精度不会受到损失,如数据类型有低向高转换;非保值转换是不安全的,数据精度会受到损失...
  • erlian1992
  • erlian1992
  • 2015年02月04日 16:35
  • 1410

C++学习笔记:转换构造函数与类型转换函数

C++类中包含集中构造函数。 1.默认构造函数。 Complex();   (以复数为例。) 2.用于初始化的构造函数。 Complex(int i,int j); 3.用于复制对象的复制构...
  • Leafage_M
  • Leafage_M
  • 2016年05月26日 12:06
  • 3448

【c/c++】类型转换函数(类型转换运算符重载函数)

用转换构造函数可以将一个指定类型的数据转换为类的对象。但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成double类型数据)。 C++提供类型转换函数(ty...
  • lzm18064126848
  • lzm18064126848
  • 2016年01月04日 18:09
  • 2808

C++转换函数

在C++中,可以利用构造函数将一个int型变量转换为一个类对象,如CMyClass aClass(5); 有人便会问,可以进行相反的转换吗?例如将一个类对象转换为一个int值, int nTemp=...
  • yjz1409276
  • yjz1409276
  • 2014年06月24日 22:54
  • 1301

C/C++库函数(tolower/toupper)实现字母的大小写转换

C/C++库函数(tolower/toupper)实现字母的大小写转换     本文将介绍库函数实现字母的大小写转换,常用到的是在ctype.h(C++中是cctype)库文件下定义的函...
  • laozhuxinlu
  • laozhuxinlu
  • 2016年05月30日 18:15
  • 11268

简单的进制转换函数

最近有个项目用到各种进制之间的转换,比如10进制转40进制,转二进制等。 于是写了一个简单的共通进制转换函数。 #include "stdafx.h" #include #includ...
  • g_idea
  • g_idea
  • 2012年06月18日 14:50
  • 1914
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于C++转换函数
举报原因:
原因补充:

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