- 博客(22)
- 收藏
- 关注
原创 C++多态知多少?
一、什么是多态?用一句话表述多态的话,那么应该是:同样的调用语句有不同的表现形态。 要了解和实现多态必须先要明确几个相关知识:相关知识#1)赋值兼容(多态实现的前提) 赋值兼容规则是指在需要基类对象的任何地方都可以使用公有派生类的对象来替代。 赋值兼容是一种默认行为,不需要任何的显示的转化步骤。赋值兼容规则中所指的替代包括以下的情况: 1,派生类的对象可以赋值给基类对象。
2017-04-14 16:51:16
415
原创 C++继承与派生知多少?
面向对象程序设计有 4 个主要特点:抽象、封装、继承和多态性 今天就来说说—继承一、类之间的关系有三种可以概括为:has-a, uses-a和 is-a has-a 包含关系,用以描述一个类由多个“部件类”构成。实现 has-a 关系用类成员表 示,即一个类中的数据成员是另一种已经定义的类。 uses-a 一个类部分地使用另一个类。通过类之间成员函数的相互联系,定义友员或对 象参数传递实现
2017-04-14 14:03:53
606
1
原创 this指针你“造(知道)”吗?
1,在类中数据是怎么存储的? 用类去定义对象时,系统会为每一个对象分配存储空间。如果一个类包括了数据和函数,要分别为数据和函数的代码分配存储空间。 如图:模型一 模型二: 可以通过求类的大小来测试编译器采用的哪种模式。如果大于double类型的字节数,则采用的第一种模式,等于double字节则采用的第二个模式。#include<iostream>using namespace std;
2017-03-14 16:32:46
2229
1
原创 TCP通信四种计时器
在TCP传输中,对于每个连接,TCP都管理着4个不同的定时器(计时器) 1,重传计时器:用于希望接收端的确认,常用拥塞避免。 TCP提供可靠的运输层。它使用的方法之一就是确认从另一端收到的数据。但数据和确认都有可能会丢失。TCP通过在发送时设置一个定时器来解决这种问题。如果当定时器溢出时还没有收到ACK确认,它就重传该数据 .这个时间间隔通常如下:1s, 3s, 6s, 12s, 24, 48s
2017-03-07 11:30:39
1354
原创 TCP传输机制三次握手四次挥手
上图是TCP数据报格式。 16位端口号:端口号标识着一个网络进程,通过IP+端口号可以唯一标定一个网络进程。比如常见的端口,HTTP服务默认TCP协议的80端口,FTP服务默认TCP协议的21端口。 32位序列号:这个序号在网络通讯中用作临时的地址,每发一个数据字节,这个序号要加1,这样在接收端可以根据序号排出数据包的正确顺序,也可以发现丢包的情况。 32位确认序列号:接收端给发送端说明,我接
2017-03-07 10:37:07
366
原创 LINUX进程通信,共享内存
//comm.h#ifndef _COMM_#define _COMM_#include#include#include#include#define PATHNAME "."#define PROJID 0X6666#define SIZE 4096*1int creatShm();int getShm();int destoryShm(int shmid);#e
2017-02-18 08:42:35
296
原创 linux下的静态库和动态库
库是什么? 在我们实际编程中,经常会引入各种库函数,那么库是什么?从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。 静态库:Linux下静态库的名字一般是libxxx.a,xxx为库的名字。利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,他的优点是编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了
2017-02-18 00:41:15
239
原创 LINUX进程间通信,信号量机制+代码实例
信号量: 一、什么是信号量 为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过某种方法,在任一时刻只能有一个执行进程访问代码的临界区域。临界区域是一种互斥资源。而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个进程在访问它,也就是说信号量是用来调协进程对共享资源的访问的。信号量是一个特殊的变量,相当于一个计数器。程序对其访问都是原子操作,且
2017-02-17 00:12:35
715
原创 C语言高级指针(1)
C语言的指针是C语言这门语言的精华所在,当然也是让很多人诟病的地方。 指针是什么?有这么一句话:“对于锤子来说,一切都是钉子。”那么换句话讲指针,即“对于指针来说,一切都是地址”。 内存是由一个个内存单元构成的,每个内存单元都有自己的地址。而指针就是用来存放这些地址的。凡是可以用指针来存储的变量,在指针看来它(变量)都是地址。 比如: 二级指针: 存放一个整型变量地址用一级指针来存放,
2017-02-13 22:27:27
305
原创 C语言可变参数列表解析及简单应用
在函数原型中,列出函数期望接受的参数,但是原型只能显示固定数目的参数。通俗来讲就是,当我们给定函数原型时候,我们也就确定了函数的参数的个数,传递参数的时候必须按照原型提供的参数个数来传递参数。 那么我们是否可以传递参数时候,提供可变个参数呢? 当然是可以的,比如我们常用的printf()函数,我们可以用以下方式传递多个参数给此函数。printf("hello");//一个参数printf("%
2017-02-09 21:19:39
380
原创 函数调用栈帧分析
分析栈帧的调用过程,需要一些工具和汇编知识的学习。首先简单的介绍一下分析栈帧时必用的一些汇编指令。 工具 VS2013调用堆栈窗口查看工具,反汇编窗口工具,监视窗口工具,内存窗口查看工具 汇编命令 mov指令:例:mov ax bx 表示把bx寄存器的值赋值给ax寄存器。 push指令:例:push ax 表示将寄存器ax中的数据送入栈中。 pop指令 :例:pop ax
2017-01-16 18:37:53
649
原创 makefile的使用和模拟实现进度条
makefile介绍一个工程必然会存在自己的目录结构,比如源文件,中间文件,可执行文件等等。在windows环境下我们常常不用关心如何去组织这些目录结构,因为在集成开发环境平台下这些工作这个IDE都为我们做好了而makefile就是linux下我们用来实现组织目录结构的工具。makefile 关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefi
2017-01-02 15:52:10
364
原创 计算机的大端模式和小端模式
1 大小端的起源:关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令所有的子民吃鸡蛋的时候,必须先打破鸡蛋较小的一端,违令者重
2017-01-01 14:51:18
1033
原创 程序的编译过程
通常,我们在像VC或VS这样的IDE集成开发平台写好一个程序之后,点击两个按钮,一个编译按钮,一个运行按钮。如果程序没有错误,那么我们将会看到预想的结果,并生成一个*.exe的可执行程序。在linux系统下,常用vim编辑器来编写程序,写好程序以后,需要gcc编译器来对程序进行编译和链接。通常会生成一个*.out的可执行文件。然而,事实上,以上过程可以分为4个步骤,分别是预处理(Prepr
2016-12-30 21:10:03
579
原创 Linux粘滞位(粘着位)
在介绍粘滞位之前,先来介绍一下文件权限和目录权限的区别。我们知道在linux系统中文件(文件和目录)的权限有三种(r,w,x),而这三种权限对文件和目录的意义有所不同。权限对文件r (read) :可读取该文件的实际内容;w(write):可以编辑,新增或者修改该文件的内容(但不含删除该文件);x(execute):代表该文件可以被系统执行对于文件的r ,w, x来
2016-12-30 14:54:58
6633
2
原创 linux下find命令详解与实例分析
find命令的一般使用格式find命令的常用选项和实例find命令的一般使用格式使用man命令查看find文档的内容,可以看到find命令的功能和使用格式。 根据帮助文档先来对find命令的一般格式做一个简单介绍。 find命令功能:在一个目录(及子目录)中搜索文件. find命令使用格式:find[-H] [-L] [-P] [path…] [expression] 其中:其中
2016-12-27 11:22:59
480
原创 C语言位运算的应用(2)
1,比较两个数中有多少个不同的位?第一种方法: 分别取出两个数字的每一位,然后进行比较,不同计数器加一,可以统计出来。int Diff_num_bit(int a, int b)//比较两个数不同位的个数{ int temp1 = 0; int temp2 = 0; int count = 0; for (int i = 0; i < 32; i++) {
2016-12-26 13:51:06
270
原创 初识vim编辑器
在谈论vim编辑器之前,先来简单的介绍一下vi编辑器。 vi是“Visual interface”的简称,它是一个文本编辑程序。可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制。 vi没有菜单,只有命令,且命令繁多。 vi在linux下的地位可以从以下看出:所有的unix like系统都会内置vi编辑器,其它的比如(nano,gedit等不一定会存在
2016-12-25 22:52:06
381
原创 LINUX下三个时间点--atime,ctime,mtime解析
在linux下使用stat命令可以详细查看一个文件的相关属性,今天就其中的三个时间点属性(atime,ctime,mtime)来重点详谈!
2016-12-24 22:13:29
865
原创 C语言位运算的应用(1)
如果能巧妙地应用位运算来解决一些问题,可能会带来意想不到的惊喜! 以下是一些常见的位运算的应用; 1,不用中间变量来交换两个数的数值。 首先我们可以用 “+ - * / ” 四则运算符来解决这个问题;int main() { int a = 10; int b = 20; a = a + b; b = a - b; a = a - b;
2016-12-09 14:50:39
581
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人