自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 问答 (1)
  • 收藏
  • 关注

转载 C++ 常见问题总结

断言,是宏,而非函数。2. 当对一个对象调用成员函数时,编译程序会先将对象的地址赋给 this 指针,然后调用成员函数,每次成员函数存取数据成员时,都会隐含使用 this 指针。内联函数是以代码膨胀为代价,消除函数调用带来的开销,如果执行函数体内代码的时间相比于函数调用的开销大,那么效率的收获会很少。3. 在类中声明同时定义的成员函数,自动转换为内联函数,因此内联函数可以访问类的成员变量,宏定义则不能。1. 虚函数可以是内联函数,内联函数是可以修饰虚函数的,但是当虚函数表示多态的时候不能内联。

2023-06-08 20:01:04 167

原创 智能指针

在使用C++的过程中我们对内存的管理是一件让人很头疼的事情。在使用new和malloc的过程中,我们往往会忘记调用delete或free去释放已经不再所使用的堆内存,导致了内存泄露的情况。内存泄露会造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。为了能保证手动申请的内存都能够被释放,C++中就引入了智能指针这个概念。我们知道在C++中对象的生成会调用构造函数,当一个对象的生存周...

2019-08-10 18:04:53 176

原创 HTTP协议分析

在前面我们有讨论过IP协议和TCP协议,讨论了他们的功能和他们是如何完成网络通信的。本篇文章中,我们来讨论HTTP协议是如何来完成网络通信的,以及它的功能是什么。我们都知道我们可以通过浏览器访问任何一个Internet网上的Web服务器。但却不知Web客户端和服务器之间就是使用HTTP协议通信的。HTTP协议是一种应用层协议,它默认使用的传输层协议是TCP协议。何为HTTP协议:大家都...

2019-08-08 14:34:18 272

原创 进程间通信(三)之共享内存

上接进程间通信(二)四、共享内存共享内存也称共享存储,共享内存就是指允许两个或多个进程共享一定的存储区。因为数据不需要客户进程和服务器进程之间复制,所以说共享内存时最快的一种IPC。使用共享内存时要掌握的唯一要点,就是多个进程之间对一定存储区的同步访问。若服务器进程正在将数据放入共享存储区,则在它做完这一操作之前,客户进程不应该去取这些数据。通常,信号量被用来实现对共享内存的同步访问。(当...

2019-07-27 19:24:24 316

原创 进程间通信(二)信号量

上接进程间通信(一)三、信号量信号量与前面的管道和消息队列不同,它相当一个计数器,用于多进程之间对共享数据对象的访问。使用信号量对共享资源进行控制之后,进程想要获取共享资源。进程需要执行下列操作:(1)检测控制该资源的信号量(2)若此信号量的值为正,则进程可以使用该资源。进程将信号量值减1,表示他使用了一个资源单位。(3)若此信号的值为0,则进程进入休眠状态,直至信号量值大...

2019-07-25 17:33:14 204

原创 进程间通信(一)

无论是多进程编程还是多线程编程都是为了能够高效的处理事务,若进程或线程之间无法进行数据交换,多进程编程或者多线程编程将显得毫无意义,每个进程都完成着自己独立的任务,与单进程、单线程有什么区别?所以进程之间需要数据交流,我们称之为进程间通信。进程都是独立运行的,所以进程要通信,必须有能够共享的东西——内核对象。内核对象:由操作系统内核维护的,在操作系统内核中的结构体变量。一般内核对象都...

2019-07-24 20:59:29 324

原创 进程、线程

在学习的过程中,我们很多人会搞不清楚进程和线程的区别,我们今天就从以下几个方面来讨论进程和线程的区别。一、概念1.进程(Process)进程时处于执行期的程序,但进程并不仅仅局限于一段可执行程序代码。进程还包含其他资源,像打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间以及一个或多个执行的线程(thread of execution),当然还包括用...

2019-07-24 15:57:32 210

原创 Linux下函数的堆栈调用

在说堆栈调用之前我们先来看看linux中一个程序的4G虚拟地址空间是如何进行分配的,我们以下面一段代码为例,int glob1 = 10;int glob2 = 0;int glob3;int add(int a,int b){ return a+b;}int main(){ int a = 10; int b = 20; int c = max(a,b); ...

2019-07-22 11:06:14 797

原创 TCP详解

TCP协议是TCP/IP协议族中一个重要到的协议。和IP协议相比,TCP协议更靠近应用层,因此在应用程序中具有更强的课操作性。一、TCP服务的特点传输层协议主要有两个:TCP协议和UDP协议,相对于UDP协议而言,TCP协议是面向连接的字节流服务,具有可靠传输的特点。使用过TCP协议通讯到的双方必须先建立连接,然后才能开始数据的读写,双方都必须为连接分配必要的内核资源,以用...

2019-03-07 16:50:57 266

原创 基本排序方法

基本的排序算法分为内排序和外排序,内排序:数据在内存中存储。外排序:数据在外存中存储。在本篇博客中,我们重点来细说下内排序。内排序分为五大类,基本的有八种:一、插入排序。1)、直接插入排序。算法:将待排序的数组分为两大部分,已排序部分和待排序部分,每次从待排序部分拿出一个元素,在已排序部分找到合适的位置插入元素。以如下数组为例{12,15,9,20,6,31,24},红线左边为...

2019-01-29 22:04:44 911

原创 C++三大特征之继承

C++有三大特征,封装、继承与多态,在本篇文章中,与大家来聊一聊继承。继承的本质就是代码的复用。简单的说,继承是指一个对象直接使用另一对象的属性和方法。C++中的继承关系就好比现实生活中的父子关系,继承一笔财产比白手起家要容易得多,原始类称为基类,继承类称为派生类,它们是类似于父亲和儿子的关系,所以也分别叫父类和子类。而子类又可以当成父类,被另外的类继承。1.在C++中派生来(子类)继...

2019-01-14 19:31:07 186

原创 函数模板详解

模板是c++泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。在 C++ 中,模板分为函数模板和类模板两种。函数模板是用于生成函数的,类模板则是用于生成类的。就以容器为例,每个容器都有一个单一的定义,比如 vector <int> 或 vector <string...

2019-01-13 18:45:47 614

原创 类中6个默认的函数

在C++中,系统给了6个默认的函数:构造函数、析构函数、拷贝构造函数u、赋值运算符的重载函数、取地址操作符的重载函数和const修饰的取地址操作符的重载函数。1、构造函数构造函数的函数名与类名相同,比如class Goods{};它的默认构造函数就是Goods(),没有返回值。构造函数时系统调用的,如果自己在类中写了,系统就不会提供,系统提供的构造函数都是共有的(public)、内联的...

2018-12-04 12:10:26 875

原创 类和对象

学习C++的都知道,C++有三大特征:封装、继承和多态1、类和对象的关系类和对象之间的关系就可以看作是现实生活中,对物体的描述与物体的实体之间的关系,实体经过抽象处理之后就是ADT,ADT对应C++中的类,对象就是类的实例化。抽象数据类型(ADT)是一个实现包括储存数据元素的存储结构以及实现基本操作的算法。我们通过一段代码来说明:#include<iostream&...

2018-11-29 15:44:20 171

原创 Linux系统下的编译、连接与运行

众所周知,我们程序员所写的代码都是英文字母与数字的集合,我们人能看懂,但是电脑只能识别高低电压,也就是所说的01代码,它是如何识别我们程序员所写的代码呢,比如c语言、c++。我们所写的代码又是经过了哪些过程之后,计算机就能识别了呢?也就是本文要讲的我们所写的代码是如何变成可执行的二进制文件的。这节讲的是Linux系统下,我们所写代码文件(.c/.cpp)文件是如何变成可执行的二进制文件的。...

2018-11-13 14:36:33 579

原创 C语言—推箱子

推箱子是一个来自日本的古老游戏,目的是在训练你的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。简单的推箱子游戏受到了广大人民的热爱,让我们来看看程序员眼中的推箱子是什么样子的。下面我给大家介绍一下推箱子的C源代码。要完成推箱子项目首先要了解推箱子...

2018-08-23 15:20:09 2905 2

原创 如何统计一本英文书(比如简爱)中出现次数最多的前1000个单词

如何统计一本书中出现最多的前1000个单词,其实只要处理好新单词的储存,已经出现单词个数的统计,和根据出现次数的排序,就基本完成了这个项目。思路:1、从文件中依次读取一个个字符,如果是字母字符就放到一个字符数组中,当读取的字符是空格或者标点符号时,则已经读取的字符串视为一个单词,将其储存起来。                                                   ...

2018-08-22 13:56:17 3102

原创 常用的字符(串)库函数

一、字符函数字符函数函数名函数原型功能返回值头文件isalnumint isalnum(int c)检查c是否是字母或数字是则返回非0,否则返回0ctype.hisalphaint isalpha(int c)检查c是否是字母是返回非0,否则返回0                                    ...

2018-05-19 11:17:35 297

原创 变量概述

       在编程语言中我们经常用到很多变量,比如整型变量、字符型变量、指针变量等等。那么它们都是如何区分的呢?下面我们以c语言为例,一起来看看。         我们说变量,变量有什么特点呢?它的属性有哪些呢?变量有五大属性:生命周期、内存区域、作用域、默认值和连接属性。我们就从这五个方面来说。        变量的可以分为四大类:(静态)全局变量、(静态)局部变量、动态内存和函数。我们分别来...

2018-05-12 21:20:42 197

原创 动态内存

      在我们编写程序的过程中,经常会使用到动态内存,比如我们在不向子函数传指针的,但又得让子函数向父函数传递一个指针,这个时候我们就得用到动态内存这个知识。      但是关于动态内存,它到底是如何创建和使用的呢?让我们一起来看一下。      一、动态内存的申请。      我们要申请动态内存,就要用到malloc(),calloc(),realloc()函数,首先就得引用#include...

2018-04-30 17:44:24 180

原创 判断一个计算是以多少进制进行的

         我们经常会遇到这么一个问题,例如,假设在n进制下,4*6=33,求n是多少?很多人一看,这不简单嘛,4*6=24,24/3=7...3,就是7进制嘛。         这种方法是可以,但是如果数字太大的情况下呢?我们得进行多么大的计算量才能算下来?所以今天我来和大家分享一个与此类似的阿里巴巴的面试题。         假设在n进制下,下列等式是成立的567*456=150216,...

2018-04-14 19:19:53 3220

原创 const的基本用法

     我们经常在编程语言中见到或使用到const,大家都知道const是定义常变量的意思,但是它是如何进行定义的,又有哪些使用规则呢。下面我和大家一起来了解了解。      在了解const之前,我们先来了解一下左值这个东西,左值:就是放在赋值符号左边的值,它为具有写权限,就是说我们可以通过赋值符号来改变它的值。     1、const定义常变量。      用const定义常变量,他所定义的...

2018-04-08 22:22:32 246

原创 循环语句for 、while、do while的区别

在编程语言中我们经常会用到循环语句,循环语句常用的有三种,for 、while、do while,那么我们在用的时候应该如择用哪一个呢?我们以对一个数字n,求1+2+3+...+n为例,做以下实验,分别用三个语句来实现它。1、for语句我们定义一个变量tmp,tmp保存和的值,再定义一个i,让i通过for循环,从i到n遍历,tmp累加i的值。int main(){ int tmp = 0; ...

2018-04-07 17:39:50 901

原创 指针的算术运算

普通的数学数字都可以进行基本的算数运算,那么指针也是也代表一种数字,它是否也可以进行基本的算术运算?1、指针加数字。指针的加法,我们先定义一个整型数组arr[],再定义一个整型指针*p,让p保存arr[]首地址的值,int *p=arr;int arr[10] = {1,2,3}; int *p = arr;我们让p+1;则有下面三种情况(1)、假设p+1加的是整个数组。        如果*p...

2018-04-06 21:51:05 1326

原创 对十进制数字的按位输出,取反,并求其位数

 如何对一些数字需要输出,取反,求其是几位数//求十进制数字n的数字位数//我们要求一个数字的位数,可以先从他的个位开始统计,step1:判断这个数字n整除10 是否为0,如果为零,则它是个个位数,如果不为0,则它至少是个两位数。step2:我们则给它的位数+1。step1:将n/10后的值赋值给n,例如:1234/10=123. 重复以上步骤/*int GetFigures1(int n){...

2018-03-27 13:25:41 3630

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除