自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

czf的编程工坊

记录编程的点点滴滴

  • 博客(20)
  • 收藏
  • 关注

原创 虚表和虚基表的对象模型

继承这一块被虚表和虚基表弄的特别晕,专开一篇来研究研究:首先:虚表和虚基表无关系!!!虚函数:虚函数是在类的非静态成员函数前加virtual,则这个成员函数成为虚函数(并不是所有的成员函数能够定义为虚函数,如构造函数等),在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,实现多态性。虚表(虚函数表):C++中的虚函数的实现一般是通过虚函数表(Virtual Table)...

2018-04-26 11:23:15 770 4

原创 虚函数和多态

知识储备:重提切片行为:1.子类对象赋值给父类对象2.父类型的指针指向了子类对象3.父类型的引用引用子类的对象虚函数:类的成员函数前面加virtual关键字,则这个成员函数称为虚函数虚函数重写:当在子类的定义了一个与父类完全相同的虚函数时,则称子类的这个函数重写(也称覆盖)了父类的这个虚函数构成多态需要满足的条件:1.函数的形参是父类的指针或者引用2.调用的...

2018-04-25 21:59:38 200

原创 C++继承概念梳理

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。类的成员具有三种访问限定符:public                protect(保护)          private    基(父)类和派生(子)类之间继承关系也是三种:    public      protect       private说明:...

2018-04-21 17:27:07 311

原创 C++封装顺序表和带头结点的双向循环链表

2018-04-19 10:27:41 351

原创 静态库和动态(共享)库

ELF可重定位目标文件的格式:ELF可执行文件的格式:静态库:(.a)静态库:(.a)

2018-04-18 15:06:31 215

原创 进程间通信之管道

匿名管道和命名管道

2018-04-17 15:41:03 159

原创 进程间通信基本概念【操作系统】

基本概念:进程同步:(司机-售票员、生产者-消费者)两个或多个进程需要相互配合才能完成一项任务进程互斥:由于各个进程都要访问共享资源,而且这些资源需要排他使用,因此各个进程间需要竞争使用这些资源,这种关系就叫进程互斥进程间通信的目的:1.数据传递2.资源共享3.通知事件进程间通信的发展历史:1.管道2.SystemV3.POSIX(可移植操作系统接口)S

2018-04-17 00:07:37 567

原创 string类模拟之引用计数和写时拷贝

在 string类的模拟之深浅拷贝  中,我们可以看到,程序浅拷贝导致的崩溃,是因为多次释放内存引起的多次析构,那么我们可以添加一个计数器,这里称之为引用计数,来表示当前的空间有多少指针指向它,如果大于一的话,那么在调析构函数的时候,就只对引用计数减一,当减到只剩一的时候就可以安心的释放内存空间了。引用计数的本质就是一个整形变量,那么我们到底应该怎么给出引用计数的形式呢?1.整形成员变量(

2018-04-16 13:17:40 205

原创 string类的模拟之深浅拷贝

浅拷贝:浅拷贝只拷贝指针,但拷贝后两个指针指向同一个内存空间,或者可以说,原对象和拷贝对象共用一个实体,任何一个对象的改变都会引起另一个的改变。当类成员不包括指针何引用时,浅拷贝并无问题;但对于指针与引用成员,当对象的生命周期结束后,浅拷贝会造成同一块内存单元被释放两次,导致内存泄漏。深拷贝:不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针指向两个不同地址。调用拷贝构造函

2018-04-16 12:43:50 193

原创 浮点型数据在内存中的存储

根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:1.(-1)^S*M*2^E2.(-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。3.M表示有效数字,大于等于1,小于2。4.2^E表示指数位。

2018-04-13 14:06:32 407

原创 Linux系统I/O

文件描述符:open/closeread/write

2018-04-11 20:53:39 643

原创 文件I/O流

1.FILE * fopen ( const char * filename, const char * mode ); 2.int fclose ( FILE * stream ); //需与fopen配套使用(打开流一定要关闭)3.int getc ( FILE * stream ); 4.int putc ( int character, FILE * stream );5.char * fgets ( char * str, int num, FILE * stream ); 6.int

2018-04-08 09:47:32 182

原创 结构体、位段、枚举、联合

结构体:结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

2018-04-07 13:08:54 131

原创 Linux进程退出、等待和替换

程序退出的场景:1.代码运行完毕,结果正确2.代码运行完毕,结果不正确3.代码异常终止常见的进程退出方法正常终止:(可通过echo $? 查看进程的退出码):1.main函数的return执行return n; 等同于执行exit(n);因为调用main的运行时函数会将main的返回值当做exit的参数2.调用exit1>调用退出处理程序(用户通过ate

2018-04-05 12:21:14 957

原创 二叉树构建和基本操作【数据结构】

二叉树的基本概念介绍可以移步:点击打开链接最终完整代码详见:点击打开链接二叉树的创建:先序遍历的应用二叉树结点的结构:typedef char BTDataType;typedef struct BinTreeNode{ struct BinTreeNode* _pLeft; struct BinTreeNode* _pRight; BTDataType _data;

2018-04-04 20:26:52 411

原创 二叉树面试题及操作【完整代码】

辅助数据结构:Stack.h#pragma once //#include "BinTree.h"//typedef pBTNode SDataType;extern struct BinTreeNode;typedef struct BinTreeNode* SDataType;#define MAX_SIZE 100typedef struct Stack{

2018-04-04 20:25:13 154

原创 内联函数和友元

内联函数 :以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈开销,内联函数提升程序运行的效率内联函数特征:1. inline是一种以空间换时间的做法,省去调用函数额开销。所以代码很长或者有循环/递归的的函数不适宜使用内联。2. inline对于编译器而言只是一个建议,编译器会自动优化,如果定义为inline的函数体内有循环/递归等

2018-04-03 23:38:21 296

原创 C++中的类的const成员和static成员

const成员函数 :在成员函数后面加const,const修饰this指针所指向的对象,也就是保证调用这个const成员函数的对象在函数内不会被改变。class Date{public: Date(int year = 1900, int month = 1, int day = 1) :_year(year) , _month(month) , _day(day) {}...

2018-04-03 23:10:37 295

原创 C++中的new/delete与malloc/free

知识储备:内存泄漏:通俗的来说内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。常见的几种内存泄漏:void MemoryLeaks(){ // 1、内存申请了忘记释放 int *pTest = (int *)malloc(10*sizeof...

2018-04-03 14:03:33 245

原创 fork()和vfork()详解

fork():1.功能:创建子进程2.返回:失败返回-1, 成功,父进程返回子进程id,子进程返回0;返回失败的原因:1.进程数达到系统规定上限,errno被置为EAGAIN,2. 系统内存不足,errno被置为ENOMEM3.调用fork之后通常要用if进行分流fork()一般用法:1.父进程希望复制自己,是父子进程能同时执行不同的代码段。例如,父进程等待客户端请求,生成子进程来处理请求。2.一...

2018-04-02 17:12:33 739

空空如也

空空如也

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

TA关注的人

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