C++复习之路:2.C和C++的区别、C++的发展(C++11,14,17,20的新特性)

新特性先挖坑

c和c++的区别:

  • c++面向对象,c是面向过程的结构化编程语言

  • c++面向对象包含的三大特性:封装、继承、多态

  • C++对比c增加了很多类型安全的功能,如强制类型转换:

其中包括四大强制类型转换

  1. const_cast: 用于将const常量转换为非const,使用const_cast<类名>实现;

例如:C++复习之路:2.C和C++的区别、C++的发展(C++11,14,17,20的新特性)_第1张图片

C++复习之路:2.C和C++的区别、C++的发展(C++11,14,17,20的新特性)_第2张图片

可以直接使用    (类名)对象      ,也可以使用   const<类名>(对象)    实现转换;需要注意的是前者是c风格的转换,后者是c++风格的转换;个人觉得c风格的更易写,但是理论上没有C++的安全。而且在出错时并不易于查找,因为(类名)这样的字符串在程序中很多,而const_cast这种很少,易于查找。

 

2.static_cast:常用来进行不同的基本类型直接的转换,如char与int、int与float、enum与int之间;

上行转换:子类指针或引用转换成基类表示——安全

  下行转换:基类指针或引用转换成子类表示——危险(没有动态类型检查)

 

3.dynamic_cast:用于动态类型转换。(运行时检查

用于基类与子类之间的转换,当我们将dynamic_cast用于某种类型的指针或引用时,只有该类型至少含有虚函数时(最简单是基类析构函数为虚函数),才能进行这种转换。否则,编译器会报错。

4.reinterpret_cast :interpret是解释的意思,reinterpret即为重新解释,此标识符的意思即为数据的二进制形式重新解释,但是不改变其值。如:int i; char *ptr="hello freind!"; i=reinterpret_cast(ptr);这个转换方式很少使用。

  • c++还多了泛化编程,模板类,函数模板啊,STL(标准模板库)

你可能感兴趣的:(c++)