C++ 类的隐式转换之基本数据类型

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

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

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个参的构造函数"<<std::endl;
}

在main中调用

#include "Time.h"

int main(int argc, char* argv[])
{
	TIME a;
	std::cout<<&a<<std::endl;
	a = 10;
	std::cout<<&a<<std::endl;
	return 0;
}

具体过程:
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<<std::endl;
	
	a = (10,10);
	std::cout<<&a<<std::endl;
	
	return 0;
}

那么它会调用两个参数的构造函数 来进行隐式转换吗?
在这里插入图片描述
不会,因为没有这个用法,隐式转换只接受一个参数

同时存在多个隐式转换:

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

TIME::TIME(double test)
{
	Test = test;
	std::cout<<"这是1个参的构造函数 double"<<std::endl;
}
int main(int argc, char* argv[])
{
	TIME a;
	std::cout<<&a<<std::endl;
	
	a = (10,10);
	std::cout<<&a<<std::endl;
	
	a = 3.14;
	std::cout<<&a<<std::endl;
	return 0;
}

在这里插入图片描述
当然也可以显式的指出:
a = (int)10;
a = (double)10;


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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值