C++特性及优缺点 - STEMHA's Blog

C++特性及优缺点

C++语言优缺点

优点

  • 兼容性好,C++在保持了C语言简洁高效的特点的同时,还对C的类型系统进行改革性扩充,相比C语言,C++更安全,其编译系统也能检查出更多错误类型。
  • 面向对象编程能力,可复用性好,可以让团队衍化出自己的的类库。
  • 性能优势,程序效率高。

缺点

  • C++ 是 C 语言的一个超集,既有指针又有对象使它成为最复杂的语言,学习难度大。过分的精细和复杂了。C++的复杂度,超过了C和OO(面向对象)的复杂度之和
  • 没有垃圾回收机制。

C++本质上说是提前编译的,Fortran也是。C#和Java大多时候是编译成字节码,运行的时候再 即使编译。Python和Ruby通常是解释型。这就产生了一个性能的分级:C++和Fortran比Java和C#快,Java和C#又比Python 和Ruby快。
几种计算机语言的评价(修订版)
为什么一些语言会比别的快?

C++特性

C++面向对象的三个基本特征:封装、继承、多态。它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用
在 C++ 中,用类进行封装(数据抽象),用类派生从一个类继承另一个:派生类继承基类的成员。
多态(动态绑定)使编译器能够在运行时决定是使用基类中定义的函数还是派生类中定义的函数
继承和多态(动态绑定)在两个方面简化了我们的程序:能够容易地定义与其他类相似但又不相同的新类,能够更容易地编写忽略这些相似类型之间区别的程序。

封装(encapsulation)

封装是一项低层次的元素组合起来的形成新的、高层次实体的技术。

  • 函数是封装的一种形式:函数所执行的细节行为被封装在函数本身这个更大的实体中。被封装的元素隐藏了它们的实现细节——可以调用一个函数但不能访问它所执行的语句。
  • 也是一个封装的实体:它代表若干成员的聚焦,大多数(良好设计的)类类型隐藏了实现该类型的成员。

目的:

  • 将抽象得到的数据和行为相结合,形成一个有机的整体(结合性)
  • 将对象的使用者和设计者分开,以提高软件的可维护性和可修改性
  • 实现代码重用

继承(inheritance)

继承:继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

  • 通过继承关联起来的类型都共享共同的接口。当一个类继承另一个类时,这两个类通常可以使用相同的操作。更确切地说,如果两种类型存在继承关系,则可以说一个类“继承”了其父类的行为——接口。
  • C++ 中所提及的父类称为基类(base class),而继承而来的类则称为派生类(derived class)

多态(polymorphism)

多态:多态的基础是继承。多态下,子类重写父类的方法,实际使用过程中,用父类引用变量指向子类对象,此时父类引用调用的是子类重写后的方法,由于是父类引用变量,所有无法调用子类特有的方法。如果想调用子类特有的方法,必须强制类型转换到子类。
多态性派生于一个希腊单词,意思是“许多形态”。之所以称通过继承而相关联的类型为多态类型,是因为在许多情况下可以互换地使用派生类型或基类型的“许多形态”。在 C++ 中,多态性仅用于通过继承而相关联的类型的引用或指针。
多态性:指的是基于引用或指针的动态类型获得类型明确的行为的能力

  • 在C++中的主要表现是动态多态(动态绑定)
  • 动态多态(动态绑定):我们能够编写程序使用继承层次中任意类型的对象,无须关心对象的具体类型。使用这些类的程序无须区分函数是在基类还是在派生类中定义的。
  • 在 C++ 中,基类必须指出希望派生类重写哪些函数,定义为 virtual 的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数。
  • 引用和指针的静态类型与动态类型可以不同,这是 C++ 用以支持多态性的基石。

静态多态(编译期/早绑定)

template(模板):静态多态(编译时完成,效率高,适配性高,松耦合性),隐形接口
overload(重载):静态多态

  1. 同名函数,不同参数/函数返回值
  2. 相同范围,同一个类中

overwrite(重写):静态多态,子类屏蔽父类的同名基函数

  1. 同名同参,无virtual
  2. 同名不同参

动态多态(运行期/晚绑定)

override(覆盖重写):动态多态(运行时完成,接口重用,编译器无法优化)

  1. 不同类中
  2. 同名,同参
  3. 基类函数有virtual

参考资料

[1]C++ primer 第四版
[2]几种计算机语言的评价(修订版)
[3]为什么一些语言会比别的快?
[4]C++ 特性及类(面试复习整理)
[5]C++ 多态-菜鸟教程

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×