建网站推广,wordpress吃内存,市北建筑建网站哪家好,无障碍网站建设方案“学习是照亮心灵的火炬#xff0c;它永不熄灭#xff0c;永不止息。” 文章目录 类的自动和强制类型转换原始类型转换为自定义类型将自定义类型转换为原始类型 类的自动和强制类型转换
原始类型转换为自定义类型
可以用一个参数的构造函数来实现#xff0c;例如#xff… “学习是照亮心灵的火炬它永不熄灭永不止息。” 文章目录 类的自动和强制类型转换原始类型转换为自定义类型将自定义类型转换为原始类型 类的自动和强制类型转换
原始类型转换为自定义类型
可以用一个参数的构造函数来实现例如
class Student{string s;int grade;Student(int i);
}int main(void)
{Student s;s11;//隐式调用构造函数来实现类型转换sStudent(11);//显式调用构造函数
}main函数中执行s11这条语句时先用构造函数临时构造一个Student变量再将这个变量赋值给s最终达到和类型转换相同的效果。 另外如果声明了explicit关键字那么不能隐式调用构造函数构造临时变量只能显式调用
//两种显式调用构造函数的方法
sStudent(11);
s(Student)11;这种转化方式也允许先进行原始类型之间的转换
//先将double类型的参数转换为int类型再进行类型转换
sStudent(11.3);
s(Student)11.3;
s11.3;注意这种构造函数可能引起二义性
class Student{string s;int grade;Student(int i);Student(double d);
}int main(void)
{Student s;//下面两个函数都会导致二义性s11;sStudent(11);
}在这种情况下11既可以作为int参数调用构造函数也可以先转换为double参数然后调用构造函数。
将自定义类型转换为原始类型
将自定义类型转换为其他类型需要特定的转换函数 operator typename(); 转换函数有以下几个特点
转换函数必须是类方法转换函数不能指定返回类型转换函数不能有参数
例如
class Student{string st;int grade;Student(int i);operator double();
}int main(void)
{Student s;s11;sStudent(11);double ds;//调用operator double()函数
}转换函数也会导致二义性
class Student{string st;int grade;Student(int i);operator double();operator int();
}int main(void)
{Student s;s11;sStudent(11);double ds;//调用operator double()函数,这样不会导致二义性couts;//导致二义性
}在最后一句中s既可以转换成double类型也可以转换成int类型因此会导致二义性。但是如果进行强制类型转换就不用担心这个问题
cout(double)s;//不会导致二义性和构造函数一样转换函数也可以用explicit关键字来表明必须使用显示类型转换。 我是霜_哀在算法之路上努力前行的一位萌新感谢你的阅读如果觉得好的话可以关注一下我会在将来带来更多更全面的知识讲解