C++ 类的隐式转换之基本数据类型
发布日期:2021-06-29 11:51:48 浏览次数:2 分类:技术文章

本文共 1145 字,大约阅读时间需要 3 分钟。

类的定义与基本数据类型相关,基本数据类型与类相互转换

接受一个参数的构造函数 为将该类型与该参数相同的值转化为类

TIME(int H);

#ifndef __TIME_H__#define __TIME_H__class TIME{
private: int nHours; int nMinutes; public: TIME(); TIME(int H, int M); TIME(int H); void SetTime(int H, int M); void ShowTime(void) const; TIME operator+(const TIME & t) const; TIME operator*( double b) const; friend TIME operator*(double b, const TIME & t);};#endif

注意这个函数 没有返回值 并没有返回一个引用 或者 对象本身

TIME::TIME(int H){
nHours = H; std::cout<<"这是1个参的构造函数"<

在main中调用

#include "Time.h"int main(int argc, char* argv[]){
TIME a; std::cout<<&a<

具体过程:

TIME a 定义了一个TIME对象 a,并调用了他的无参构造函数,
然后 程序使用了 TIME(int H); 来创建一个临时对象,并将10作为他的初始值,接下来采用逐成员赋值方式,将该临时对象的内容拷贝给a,这一过程称之为隐式转换
在这里插入图片描述

TIME(int H, int M = 0);

提供一个默认值,也可以进行隐式转换

二者不能同时存在,否则编译器不知道调用哪个?报错


如果在main中这么调用

int main(int argc, char* argv[]){
TIME a; std::cout<<&a<

那么它会调用两个参数的构造函数 来进行隐式转换吗?

在这里插入图片描述
不会,因为没有这个用法,隐式转换只接受一个参数

同时存在多个隐式转换:

TIME::TIME(int H){
nHours = H; std::cout<<"这是1个参的构造函数 int"<
int main(int argc, char* argv[]){
TIME a; std::cout<<&a<

在这里插入图片描述

当然也可以显式的指出:
a = (int)10;
a = (double)10;


explicit 关键字可以关闭这种自动特性

explicit TIME(int H);

我们只能使用显式的构造方法来使用
a = (TIME)10;

转载地址:https://blog.csdn.net/ZZHinclude/article/details/114386083 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:转换函数
下一篇:如何创建友元函数

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月05日 17时12分34秒