服务端视角的C++从入门到精通(十二)

119 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第21天,点击查看活动详情

C++的面向对象

有一些人说C++=C+OO+STL,我觉得有一定道理。有了STL,就有了容器,就有了算法,很多通用的常见的功能就已经被内置好了,编程者无需再浪费时间重复造轮子了,而且STL基本提供了非常优秀的内部实现(比如典型的mapunordered_mappriority_queue等等),所以性能也基本也达到了极致,开发者无需再花费心神去进行更多的优化。这也就是为什么很多人都会选择C++来做LeetCode或者是牛客等平台上的算法题,就是因为C++相比C更高级而相对Java又不臃肿。而OO更是一项伟大的发明。它其实是一大类思想,那就是“高内聚、低耦合”。很多具有相同或相似功能的内容集合在一起,便成了“面向对象”。

封装、继承、多态是C++的三大面向对象特性。

封装,就是指用一个作用域将变量和函数包起来,这个之前也讲到过。这里就涉及到可见性的问题。C++中变量及函数的可见性可以分为以下几种:privateprotectedpublic。这三种级别的可见范围是逐渐变大的。被private修饰的变量和函数只能类内访问;被protected修饰的变量和函数还可以被其子类访问;public则最为宽容,任何地方都可以随意访问。一般来说,为了满足封装性的要求,类会对外暴露public可见性的setget方法,而将变量设置为private,这样保证外部只能通过规定的方式进行获取与设置,从一定程度上保证了安全性。C++中的继承主要是如下:

class Child : Father {
}

其中Child就是子类名,Father就是父类名。继承可以减少很多冗余的重复代码,减少开发量,降低维护成本,很多设计模式底部的基石都是继承这一特性。