189 8069 5689

C++中类型转换的示例分析-创新互联

这篇文章给大家分享的是有关C++中类型转换的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

为安源等地区用户提供了全套网页设计制作服务,及安源网站建设行业解决方案。主营业务为成都网站建设、做网站、安源网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

C++的类型转换详细介绍

1、类型转换名称和语法

   C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:

   TYPE b = (TYPE)a

   C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。

static_cast             静态类型转换。如int转换成char

          reinterpreter_cast 重新解释类型

    dynamic_cast       命 名上理解是动态类型转换。如子类和父类之间的多态类型转换。

          const_cast           字面上理解就是去const属性。

   4种类型转换的格式:

   TYPE B = static_cast (a)

2、类型转换一般性介绍

   4中类型转化介绍

1)static_cast<>() 静态类型转换,编译的时c++编译器会做类型检查;

       基本类型能转换 但是不能转换指针类型

   2)若不同类型之间,进行强制类型转换,用reinterpret_cast<>() 进行重新解释

   3)dynamic_cast<>(),动态类型转换,安全的基类和子类之间转换;运行时类型检查 (C++特有的)

   4)const_cast<>(),去除变量的只读属性(C++特有的),变量的类型必须是指针,指针指向的内存空间可被修改

    一般性结论

   C语言中  能隐式类型转换的,在c++中可用 static_cast<>()进行类型转换。因C++编译器在编译检查一般都能通过;

   C语言中不能隐式类型转换的,在c++中可以用 reinterpret_cast<>() 进行强行类型 解释。

   static_cast<>()和reinterpret_cast<>() 基本上把C语言中的 强制类型转换给覆盖

   reinterpret_cast<>()很难保证移植性。

3、典型案例

代码中包含了4中类型转化的实例,以及注意点。

#include
using namespace std;

class Animal
{
public:
 virtual void action()
 {
 cout<<"the action is animal's "<action();
 Dog *dog = dynamic_cast(animl);
 if(dog!=NULL) //判断是不是dog
 {
 dog->action();
 dog->doSwim();
 }

 Cat *cat = dynamic_cast(animl);
 if(cat!=NULL) //判断是不是cat
 {
 cat->action();
 cat->doTree();
 }
 cout<<"func ObjPlay is exit!!!\n"<(p); //去除只读的属相
 p2[0] = 'b';
 cout << p << endl;
}

int main()
{
 //静态类型转化 static_cast<>()
 double d = 3.14159;
 int i1,i2;
 i1 = d; //C中的隐式类型转化
 i2 = static_cast(d); //C++中的静态类型转化
 cout<<"C中类型转化:"<()
 char *p = "abcd";
 int *p1 = NULL;
 int *p2 = NULL;
 p1 = (int *)p; //C中强制类型转化
 //p2 = static_cast(p);  编译报错,类型转化错误,静态类型不能转化指针
 p2 = reinterpret_cast(p); //C++中的重新解释类型
 cout<<"C中类型转化"<()
 Animal an;
 Animal *pAn = &an;
 ObjPlay(pAn);

 Dog dog;
 Dog *pDog = &dog;
 ObjPlay(pDog);

 Cat cat;
 Cat *pCat = &cat;
 ObjPlay(pCat);

 Desk desk;
 Desk *pDesk = &desk;
 //Animal *pAn = dynamic_cast(pDesk); 不同的基类指针之间不能相互转化,安全

 //去除变量的只读属性,const_cast<>(),此类型必须是指针
 char buf[100] = "aaaaaaaaaaaa";
 //Opbuf(buf);
 //要保证指针所执行的内存空间能修改才行 若不能修改 还是会引起程序异常
 //Opbuf("dddddddddddsssssssssssssss");

 system("pause");
 return 0;
}

感谢各位的阅读!关于“C++中类型转换的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


名称栏目:C++中类型转换的示例分析-创新互联
浏览路径:http://jkwzsj.com/article/cogppp.html

其他资讯