C++ 只有三大特性吗?不,有四个

2,358 阅读3分钟

一般说到 C++ 的特性,主要指三个,分别是封装、继承和多态,注意顺序不要打乱,这是个循序渐进的过程。

1 封装

封装指的是把数据和操作这些数据的方法(函数)集中起来,集中起来有两大好处:一是便于管理。这很好理解,比起散落在代码各处的变量和方法,集中的数据和方法很好管理;二是权限。对于封装起来的数据和方法,可以选择对外暴露,也可以选择对外不可见,还可以选择对外部分可见。

而类(class)就是实现封装的主要手段,类里面包括成员数据,成员函数、构造函数,析构函数,同时这些数据和成员函数都有访问权限,分别是 public、protected 和 private. 实现封装的另一个手段就是命名空间(namespace),用大括号把一块代码中包起来,只有通过作用域限定符(::)才能访问它们。

2 继承

有了类的概念之后,才有了继承,如果没有类,就不会有继承。继承是两个类之间的一种关系,通过继承可以实现一个类直接使用另一个类的属性和方法,当然并不是所有的数据和属性都会通过继承传递给另一个类,继承也有三种类型:public、protected 和 private.

继承有三大好处:一、能够减少重复的代码;二、继承增加了类的耦合性;三、继承是多态的前提。

3 多态

多态可以说是 C++ 中最重要的特性了吧,类和继承的存在都是为了实现多态。由于继承在程序的编译期就决定了,无法在运行期改变父类继承过来的实现。如果继承下来的子类不适合解决新问题,那么父类必须重写或替换,这种依赖关系就限制了灵活性,最终限制了复用性。C++ 通过在类中定义虚函数,然后在子类中重写该函数,从而实现(动态)多态,使用时通过定义指向派生类的基类指针实现。

继承中的重要概念就是虚函数、虚函数表、虚表指针和虚继承。

4 模板

有人把模板认为也是多态的一种,叫静态多态,我认为这是不合理的,模板的功能远比我们想象的要强大得多,借助它可以实现元编程和泛型编程,而它们正是 C++ 中的两大编程范式。元编程侧重点在于“用代码生成代码”,泛性编程侧重点在于“减小代码对于特定数据类型的依赖”,碰巧这两件事 C++ 的模板都可以干。

模板元编程把模板的一些技术(特化、实例化、SFINA)当成模板元编程这种特定语言的控制流。例如 fact<10>::value 会在计算 value 的过程中实例化 11 个 fact(i 从 0 到 10)的空类。实例化代码是计算手段,是递归的中间结果。而泛型编程是将模板用特定的类型来实例化,例如将模板类 vector 实例化成真正的类 vector,实例化代码是最终目的。值得注意的是,模板元编程在程序的编译期实现的。

f2d082717e3f46168762d845ac802313.png

31ce4fdaf5344d189dfa8b2a59280b1d - 副本.png 最后,遇到问题多百度,多找大神问也是很重要的,建议进这个群一起聊,跟前辈一起探讨,也会得到很多帮助。也可以交流学习心得,技术问题,可以获取PDF书籍源码、教程等给大家免费使用 。