c++
编程知识点积累
比博士
这个作者很懒,什么都没留下…
展开
-
C/C++ 静态链接库(.a) 与 动态链接库(.so)
平时我们写程序都必须include很多头文件,因为可以避免重复造轮子,软件大厦可不是单靠一个人就能完成的。但是你是否知道引用的那些头文件中的函数是怎么被执行的呢?这就要牵扯到链接库了!库有两种,一种是静态链接库,一种是动态链接库,不管是哪一种库,要使用它们,都要在程序中包含相应的include头文件。我们先来回顾一下程序编译的过程。如下图:我们结合gcc指令来看一下每个阶段生成的文件: 1 gcc-c helloWorld.c 生成一...转载 2020-11-25 11:21:14 · 1638 阅读 · 0 评论 -
C++静态成员属性总结
原创 2020-11-23 20:15:37 · 150 阅读 · 0 评论 -
重载、重写、隐藏对比一览图
原创 2020-11-15 22:11:22 · 68 阅读 · 0 评论 -
冗长switch-case语句优化方案
1、前言 在实际的编程中,我们经常会使用到switch..case语句,这通常也是对一长串if..else if语句的优化。对于一些简单的情况(只每个case代码中代码长度不会很长,而且case分之并不多的情况),用switch..case语句即可,此时代码的可读性并不会很差,结构也算是清晰。但是一旦case分支数目众多,每个case语句块中代码长度也很长,这时对于维护这段代码的同学则是个噩梦了(本人就遇到过一段代码,case分支有近20个,每个case语句块中,代码长度均有几十上百行,有的甚至有..转载 2020-11-07 10:24:27 · 7069 阅读 · 0 评论 -
三种工厂模式的C++实现
引出工厂模式的设计问题◆ 1.为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题 n 多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如 new ×××;的代码。这里带来两个问题:客户程序员必须知道实际子类的名称(当系统复杂后,命名将是一个很不好处理的问题,为了处理可能的名字冲突,有的命名可能并不是具有很好的可读性..转载 2020-11-07 09:02:52 · 301 阅读 · 0 评论 -
重载(overload)、覆盖(override)、隐藏(hide)的区别示例
这三个概念都是与OO中的多态有关系的。如果单是区别重载与覆盖这两个概念是比较容易的,但是隐藏这一概念却使问题变得有点复杂了,下面说说它们的区别吧。重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。覆盖(也叫重写)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现体不一样。隐藏是指派生类中的函数把基类中相同名字的函数屏蔽掉了。隐藏与另外两个概念表面上看来很像,很难区分,其实他们的关键区别就是..转载 2020-10-31 17:49:29 · 416 阅读 · 0 评论 -
C++ 虚函数表解析
前言C++中 的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术 可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现...转载 2020-10-14 09:30:25 · 156 阅读 · 0 评论 -
代码细节——圈复杂度
什么是圈复杂度?—————————————————————————————————————圈复杂度(Cyclomatic Complexity)是衡量计算机程序复杂程度的一种措施。它根据程序从开始到结束的线性独立路径的数量计算得来的。圈复杂度越高,代码就越难复杂难维护。坑就越大。。。从1开始,一直往下通过程序。 一但遇到以下关键字,或者其它同类的词,就加1:if,while,repeat,for,and,or。 给case语句中的每一种情况都加1。例如下面这个函数,圈复杂度为1,意..转载 2020-10-26 17:23:24 · 1472 阅读 · 0 评论 -
代码细节——接口宏定义
此处仅讨论与协议或者接口相关的宏定义,使用宏定义变量比直接使用数字有以下便利:1、相对“魔鬼数字”,使用宏定义会使代码含义更加明确;2、维护方便,当接口或者协议变更,通过修改宏定义来“一键式”替换,一可以减少工作量,;二可以保证不会漏改,大大减少出错概率(这点很重要)。...原创 2020-10-16 17:11:23 · 529 阅读 · 0 评论