class A
{
private:
double a;
int b;
public:
A(double a);
A(double a,int b);
上面的函数如果构造函数只有一个参时,则需要进行隐式的类型转化,也就是先将传递的参数转换成double型,然后再赋值给类。然而,有的时候不需要这种转换,可以在声明中使用explicit,则构造函数就不会用于隐式的转换了。
显示的转换需要在前面加上类型函数,例如st=int(lb);
2:转换函数:能否将上述的对象转化为double呢?例如:A a(12.5);double d=a;
可以这样做,但不是使用构造函数,而是用转换函数。转换函数是用户定义的强制类型转换,可以像使用强制类型转换那样使用它们。例如:
A a (12.2);
double a1=double (a);
double a2=(double) a;
如何定义转换函数呢?转换函数的原型是:operator typeName();
1):转换函数必须是类方法。
2):转换函数不能指定返回类型。
3):转换函数不能有参数。
例如:operator double();
总之,C++为类提供了下面的类型转换。
1)只有一个参数的类构造函数用于将类型与该函数与该参数相同的值转换为类类型。例如,将int 值赋值给stonew对象时,接受int 参数的stonewt类构造函数将自动被调用。然而在构造函数声明中使用explicit可防止隐式转换,而只允许显示转换。
2)被称为转换函数的特殊类成员运算符函数,用于将类对象转换为其他类型。转换函数是类成员,没有返回类型,没有参数,名为operator typeNmae(),其中,typeName是对象被转换成的类型。将类对象赋给typeName变量或将其强制转换为typeName类型时,该转换函数将自动被调用。
本文探讨了C++中构造函数在类型转换中的作用,特别是当构造函数只有一个参数时如何进行隐式类型转化。通过使用`explicit`关键字,可以阻止隐式转换,仅允许显示转换。此外,还介绍了转换函数的概念,它是用户定义的强制类型转换,无返回类型且无参数,如`operator double()`。转换函数在将类对象转换为其他类型时自动被调用。
596

被折叠的 条评论
为什么被折叠?



