- 博客(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
原创 进程间通信基本概念【操作系统】
基本概念:进程同步:(司机-售票员、生产者-消费者)两个或多个进程需要相互配合才能完成一项任务进程互斥:由于各个进程都要访问共享资源,而且这些资源需要排他使用,因此各个进程间需要竞争使用这些资源,这种关系就叫进程互斥进程间通信的目的: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
原创 文件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
原创 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关注的人