关于C++转换函数
来源:互联网 发布:windows 2000 ghost 编辑:程序博客网 时间:2024/06/06 01:57
关于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++转换函数
- c 字符串转换函数
- C类型转换函数
- c++-转换构造函数
- 【c/c++】转换构造函数
- C#.net 关于类型转换
- 关于C函数
- C++:关于构造函数
- 【C++】关于指针函数
- C语言--关于函数
- 关于c++pow()函数
- 混沌 IN C++::转换函数
- C常用字符转换函数
- C/C++数据类型转换函数
- C语言字符串转换函数
- c字符串转换函数分析
- 【Linux C】时间转换函数
- C++static_cast类型转换函数
- 第二题、打鱼问题
- 谷歌开源Gumbo:纯C语言实现的HTML5解析库
- 小手一抖,eclipse妙用
- 数学之美番外篇:平凡而又神奇的贝叶斯方法
- Executors的工厂方法提供的5种不同的线程池
- 关于C++转换函数
- 新型网站开发之:从服务端取数据的最简方法
- 1099. Build A Binary Search Tree
- 回溯法-旅行售货员问题(C语言)
- android 自定义NotifiCation
- android 设计高性能的应用程序
- How Did Watson Answer —— Automatic Knowledge Acquisition
- ScrollView套ListView种种问题
- 修改 drawable 图片指定颜色