鄂尔多斯网站开发,火车头wordpress接口,建设网站协议合同范本,网站收缩目录模板文章目录一、类型转换简介二、示例1.隐式类型转换2.强制类型转换一、类型转换简介
C中类型转换从形式上可分为显式和隐式两种。 隐式类型转换则是由编译器自动完成类型转换过程#xff0c;可以分为内置数据类型转换和自定义数据类型转换。
显式的类型转换通常使用强制类型转…
文章目录一、类型转换简介二、示例1.隐式类型转换2.强制类型转换一、类型转换简介
C中类型转换从形式上可分为显式和隐式两种。 隐式类型转换则是由编译器自动完成类型转换过程可以分为内置数据类型转换和自定义数据类型转换。
显式的类型转换通常使用强制类型转换操作符如static_cast、reinterpret_cast、const_cast、dynamic_cast来完成。 static_cast表示静态类型转换既可以进行基础类型之间的转换也可以完成自定义类型转换操作符以及父类子类间指针的类型转换。但static_cast 进行转换时不进行安全检查使用时非常危险因此引入 dynamic_cast转换。 reinterpret_cast表示可以将C内置数据类型转换为任何类型也可以进行指针的类型的转换一般不用太容易出问题。 const_cast表示将常量类型转化为非常量类型。 dynamic_cast表示动态类型转换常用于指针间的转换。需要注意父类指针转换子类对象时基类中一定要有虚函数否则会报错。
二、示例
1.隐式类型转换
//隐式类型转换内置数据类型
void testImplicitConvert()
{//算数计算int a 1;double b a;cout typeid(b).name() endl;}
//隐式类型转换(自定义类型)
class Boy
{
public:Boy(const string Name) : name(Name){};void PlayWith(const Boy b);private:string name;
};void Boy::PlayWith(const Boy b)
{if (b.name name){cout 和 b.name 玩 endl;}else{cout 和 b.name 玩 endl;}
}int main()
{testImplicitConvert();Boy A(杨洋);Boy B(许嵩);A.PlayWith(B);A.PlayWith(string(杨洋));system(pause);return 0;
}double
和许嵩玩
和杨洋玩2.强制类型转换
//静态类型转换父类子类
class Person
{
public:int Age;
};class Girl : public Person
{};//静态类型转换内置数据类型
void test1()
{int a 1;double b static_cast double (a);cout typeid(b).name() endl;Person* p1 new Person;Girl* p2 new Girl;Girl* p3 static_cast Girl* (p1); // 不安全Person* p4 static_cast Person* (p2); // 安全
}//动态类型转换
void test2()
{Person* p1 new Person;Girl* p2 new Girl(迪丽);//父类转换为子类/*Girl* p3 dynamic_cast Girl* (p1); */ // 报错父类需要使用多态即虚函数//子类可以转换为父类Person* p4 dynamic_cast Person* (p2); // 安全cout p2-Name endl;cout p4-Name endl;
}