自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 菱形继承

菱形继承下图展示了一个简单的菱形继承(假设是public方式继承)菱形继承的问题数据冗余和二义性上图B和C都继承了A,B和C的数据中除了有自己的成员变量外,还有继承自A的成员:_a,此时D同时继承了B和C,那么D中除了自己有的成员变量以外,还包含了继承自B和C的成员变量,此时D中就同时有_b,_c,_d,_a 那么_a究竟是B中的还是C中的呢,而且多继承使得数据大量的重复堆积,使得派生类...

2019-08-22 00:33:12 215

原创 C++泛型编程:模板

泛型编程是编写与类型无关的代码,而模板是泛型编程的基础在学习C/C++过程中, 我们可能常用几种函数, 由于传入的参数不同, 需要进行不同的函数的编写, 在C语言中需要根据参数和功能的不同重新编写新的函数, 而在C++中有函数重载这样的机制,一定程度上解决了问题,但是重载的函数仅仅只是类型不同,代码的复用率比较低,只要有新类型出现时,就需要增加对应的函数代码的可维护性比较低,一个出错可能所...

2019-07-12 17:08:42 218

原创 类的6个默认成员函数

一个空类class empty { //什么都没有...}看起来什么都没有,实际上它自动生成了6个默认成员函数;构造函数析构函数拷贝构造函数赋值运算符重载普通对象取地址运算符重载(很少自己实现)const对象取地址运算符重载(很少自己实现)1.构造函数如果用户不显式定义构造函数,编译器会默认生成一个无参的构造函数类名()//生成的无参数的构造函数{}如果...

2019-05-30 20:42:35 215

原创 C++this指针

先贴上一段代码class Alien { public: Alien(int age , string home) { _age = age; _home = home; } void say() { cout << "I'm alien" << "...

2019-05-25 21:43:01 177

原创 计算类的大小(结构体内存对齐)

类的对象中只保存成员变量,而成员函数保存在公共的代码段计算类的大小class A{ //有成员函数和成员变量 void func(){} int a;};class B{ //只有成员函数 void func(){};};class C{ //空类};sizeof( A ) = 4sizeof( B ) = 1;sizeof( C ) = 1;一个类的...

2019-05-25 18:21:06 318

原创 C++初识类和对象

类和结构体C语言中有结构体这种自定制类型,在C++中,有一种兼容C语言结构体并且功能更加强大的东西—类在C语言中,结构体内只能定义变量, 而在C++中不仅能够定义变量,还能定义函数struct Alien{ void say() { cout << "I'm an alien" << endl; } int _age; string _home;}...

2019-05-25 16:38:57 186

原创 生产者消费者模型

生产者消费者模型C语言代码 分别用条件变量和信号量实现条件变量实现#include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <pthread.h> #include "list.h"//这是自己实现的链表 ...

2019-05-19 20:49:57 446

原创 线程同步与互斥(线程安全)

同步 : 临界资源的合理访问互斥 : 临界资源同一时间唯一访问互斥变量不一定要是全局变量, 只要多个线程都能访问到就行了互斥锁#include <pthread.h>pthread_mutex_t mutex; //创建一把互斥锁int pthread_mutex_destroy(pthread_mutex_t *mutex);//销毁互斥锁int pthread...

2019-05-19 20:37:06 1122

原创 Linux线程相关函数

创建线程#include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); pthread_t *thread-------传递一个pthread_t变量地址进来,...

2019-05-19 20:22:26 383

原创 Linux线程概念

在LInux中,线程就是轻量级的进程线程和进程的关系轻量级进程(light-weight process), 也有PCB, 创建线程使用的底层函数和进程一样都是clone从内核里看进程和线程是一样的, 都有各自不同的PCB, 但是PCB中指向内存资源的三级页表是相同的进程可以蜕变成线程线程就是寄存器和栈在Linux下, 线程就是最小的执行(CPU调度)单位, 进程是最小的资源分配单位...

2019-05-19 20:13:50 315

原创 Linux信号

1.kill: kill -l 查看所有信号 man 7 signal 查看man手册信号章节前32个信号是Unix系统经典信号,与软件,操作系统相关, 后32个是实时信号, 驱动编程时使用 #include <sys/types.h> #include <signal.h> int raise(int sig); 向自己发送信号...

2019-05-19 19:59:21 211

原创 Linux基础IO

打开文件:int open(const char *pathlname, int flags);int open(const char *pathname, int flags, mode_t mode);第一个参数:路径名称(文件名),第二个参数:标志位,本质是个整形数字,O_表示or ,flags是一个32位的整形,其中必须有且只有以下常数中的一个(必选项)O_RDONLY----...

2019-05-19 19:49:32 168

原创 Linux进程控制---Minishell

1.进程的创建1.使用fork创建进程int main() { int pid = fork(); //创建子进程,返回值大于0是父进程,返回值等于0是子进程 int n = 10; if(pid > 0) { while(1) { printf("parent %d %p %d\n", ...

2019-05-13 20:25:50 235

原创 C++缺省参数和引用

缺省参数缺省参数就是在声明一个函数时, 你事先为它设置默认值, 当传参的时候, 如果你没有为缺省的参数传值,就使用默认值,缺省函数的使用规则:1.缺省的参数只能是常量且只能从最右边开始,如果有多个缺省,它们必须连续void func(int a, int b, int c = 0);//正确,缺省在最右边void func(int a = 0, int b, int c);//错误,只能...

2019-05-11 11:24:18 1005

原创 为什么C++支持函数重载

函数重载的概念:函数重载是C++语言的一个重要特性在同一作用域,多个函数在函数名相同的情况下,形参列表不同的就构成重载例如:int &add(int a, int b){ static int c = a + b; return c;}double &add(double a, double b){ static double c = a + b; retu...

2019-05-11 10:19:59 446

原创 C++的发展历史

C++的诞生  C++是一门应用广泛的编程语言, 最初是Bjarne博士等人试图去分析UNIX的内核的时候, 没有合适的工具,在解决这个问题的过程中, Bjarne博士开始思考是不是要开发一种新的语言,当时贝尔实验室对这个想法很感兴趣,就让Bjarne博士等人组成一个开发小组,专门进行研究。  当时C++叫做"C with Class", 直译过来就是"有类的C", 由于当时C语言的地位是当时...

2019-05-10 16:44:02 1352

原创 C++命名空间

命名空间是为了避免名字定义冲突的,标准库定义的所有名字都在命名空间std中, 当我们想使用来自命名空间中的名字时, 需要声明该名字属于哪个命名空间, 比如想使用命名空间std中的cout, 就需要配合作用域运算符"::", 如 std::cout不使用std命名空间的代码:#include <iostream>int main(){ int a, b; std::cout ...

2019-04-23 22:06:04 145

转载 Linux进程调度算法

先来先服务(FCFS)  先来先服务的调度算法:最简单的调度算法,既可以用于作业调度 ,也可以用于程序调度,当作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,优先从后备队列中,选择一个或多个位于队列头部的作业,把他们调入内存,分配所需资源、创建进程,然后放入“就绪队列”,直到该进程运行到完成或发生某事件堵塞后,进程调度程序才将处理机分配给其他进程优点: 有利于长作业(进程)和C...

2019-04-20 17:35:36 1624 1

原创 Linux下的重要目录

Linux 下有些重要目录比如/proc, /sys, /SElinux, /bin, /usr/lib, /usr/local, /var, /tmp,这些目录背后又有什么含义, 通过实际的探索, 来看看它们的真实面目内核版本:发行版信息/proc  Linux内核提供了一种通过/proc文件系统在运行时访问内核内部数据结构,改变内核设置的机制, proc文件系统只存在于内存中, 不...

2019-04-20 16:59:07 376

原创 Linux进程间通信

下面简单介绍有三种进程间通信的方式 : 1. 匿名管道–pipe; 2.命名管道–fifo; 3.内存映射–mmap;管道位于内核中, 进程共享内核区域1. pipe 管道 #include <unistd.h> int pipe(int pipefd[2]); #define _GNU_SOURCE /* See feature_test_ma...

2019-04-05 20:23:24 186

原创 Linux进程相关函数

进程相关函数(进程原语)1.fork #include <unistd.h> pid_t fork(void); pid_t 可以看做无符号整形 #include <sys/types.h> #include <unistd.h> id_t vfork(void); 成功时,子进程的PID在父进程中返回,子进程...

2019-04-05 18:42:03 413

原创 Linux进程概念

进程概念:进程 : 进行中的程序(用户角度), 运行一个程序需要描述一个程序的运行,通过一个task_struct结构体描述,统称为PCB(操作系统角度)程序 : 一堆代码, 存储在硬盘中, 程序运行起来就会被加载到内存中,删除硬盘中的程序,并不会使进程关闭操作系统管理进程 : 描述进程, PCB—struct task_struct{} 操作系统通过PCB来管理运行中的程序, 其本质是一个...

2019-03-31 19:42:49 136

原创 Linux常用工具

Vim与其他编辑器之间的对比Emacs  Emacs不仅仅是一个编辑器,他是一个整合环境,或可称它为集成开发环境,这些功能如让使用者置身于全功能的操作系统中。Emacs不仅可以作为文本编辑器,还可以用来收发电子邮件、通过FTP/TRAMP编辑远程档案、通过Telnet登录主机、上新闻组、登陆IRC和朋友交流、查看日历等功能Eclipse  Eclipse是一款很酷的开源代码编辑器,它拥有代...

2019-03-30 12:46:18 161

原创 Linux操作系统常用命令小结

  花了两天时间小结Linux操作系统的常用命令,在学习Linux操作系统时遇到不会的可以方便地查看这些命令文件&amp;amp;目录相关1.查看&amp;amp;创建文件&amp;amp;转盘符2.创建和删除目录3.文件移动和重命名4.拷贝文件和目录5.查看详细内容并输出到终端6.软链接硬链接7.计算文件Byte数,字数,列数8.指定文件查看格式9.查看某个目录的大小10.查找文件11.改变文...

2019-02-28 17:38:14 227

原创 C语言实现通讯录(动态版)

用C语言实现一个具有下列功能的通讯录(动态版):1.添加联系人2.删除联系人3.修改联系人信息4.查找联系人5.显示所有联系人信息6.清空所有联系人8.将联系人信息保存在文件中9.加载联系人由于验证动态分配内存是否有效,我把size(通讯录的容量大小)初始化为1了,每次扩容增加到原来容量的2倍#define _CRT_SECURE_NO_WARNINGS#include &amp;l...

2019-02-20 16:01:35 416 1

原创 C语言实现的多功能通讯录

用C语言实现一个具有下列功能的通讯录(静态版):1.添加联系人2.删除联系人3.修改联系人信息4.查找联系人5.显示所有联系人信息6.清空所有联系人8.将联系人信息保存在文件中9.加载联系人下面是全部代码: 其中[成员函数]是被其他方法调用的,不暴露给用户使用#define _CRT_SECURE_NO_WARNINGS#include &lt;stdio.h&gt;#in...

2019-02-19 00:28:55 298

原创 自定义类型:结构体,枚举,联合

C语言中有三个自定义类型:结构体,枚举,联合.下面分别描述一下它们的特点和使用方法.结构体结构体的声明 struct tag { member-list; }variable-list;  结构体是一些值的集合,这些值称为成员变量,定义结构体时可以在结构体中添加各种变量,这些变量的类型可以不同.  例如描述一个苹果: struct apple { double si...

2019-02-17 14:52:51 166

原创 指针和数组

指针  指针是用来保存变量地址的变量,在32位操作系统下指针有4个字节,而在64位操作系统下指针有8个字节   指针保存的地址与该地址对应的变量间的关系就好比钥匙之于锁,门牌号之于房间, 我们可以通过钥匙打开相应的锁,通过门牌号找到对应的房间   通过指针与变量之间的关系特点,我们可以通过操作指针实现各种应用,具体应用可以在其他地方找到   下面主要是关于一级指针;二级指针;指针数组和数组...

2019-02-14 16:04:33 160

原创 小结C语言操作符

C语言提供了很多操作符,种类繁多,不易掌握,有些操作符甚至能将初学者折磨的痛苦不堪,望符生畏。操作符

2018-11-20 22:59:46 294

原创 打印斐波那契数列的递归法和迭代法的速度比较

tftyf

2018-11-05 17:46:21 962

原创 第一篇博客

这是我的第一篇博客。先做个自我介绍。我是一名在校的本科大学生,今年大三,正在以成为一个JAVA后台开发工程师为目标学习编程,爱动脑思考,喜欢钻研事物的本质,平时没事会在网上自己找一些编程练习题做着玩,比如五子棋,梭哈等小游戏的控制台代码编写。以此锻炼自己的逻辑思维。我想这些能对我未来的学习有所帮助。学习编程不仅要熟练掌握它的语法,还要有足够的大量的练习去积累经验开拓思维,为以后的学习打下坚实...

2018-10-24 22:47:34 191

空空如也

空空如也

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

TA关注的人

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