类的定义与基本数据类型相关,基本数据类型与类相互转换
接受一个参数的构造函数 为将该类型与该参数相同的值转化为类
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;