- 博客(28)
- 收藏
- 关注
原创 C++中string的基本使用
void test_string1() //对象的创建{ string s1; string s2("haha"); string s3(s2); s1 = s2; cout << s1 << endl; cout << s2 << endl; cout << s3 << endl;}void
2018-11-23 17:54:40
353
原创 深浅拷贝解析
浅拷贝:只是对指针的拷贝,拷贝后两个指针指向同一块内存空间,两个对象共享一份资源,当一个对象销毁时就会将资源释放 掉,而另一个对象不知道资源已经释放,以为还有效,所以继续对资源进行访问时就会发生访问违规。#include<iostream>#include<assert.h>#include<unistd.h>#incl...
2018-11-15 21:02:57
181
原创 C++模板简单介绍
泛型编程:编写与类型无关的通用代码,是代码复用的一种手段模板是泛型编程的基础模板又分为函数模板和类模板函数模板: 该函数与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本 template是用来定义模板参数的关键字,也可以使用class(不能使用struct)template<class T>T add(T&left, T&am...
2018-11-07 21:21:50
210
原创 设计类、单例模式
1.请设计一个类,该类只能在堆上创建对象 方法:将类的构造函数和拷贝构造函数声明为私有,防止别人调用拷贝在栈上生成对象 提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建class heaponly{public: static heaponly*getheap() { return new heaponly; }privat...
2018-11-07 17:39:50
210
原创 基础IO
练习open/read/write/close等文件相关系统调用接口,纵向对比fd与FILE结构体:open原型:int open(const char *pathname,int flags,mode_t mode); 第一个参数是要打开或创建的目标文件 第二个参数是打开文件的方式 O_RDONLY:只读打开 O_WRONLY:只写打开 ...
2018-10-21 13:27:55
118
原创 封装fork/wait等操作, 编写函数 process_create
封装fork/wait等操作, 编写函数 process_create(pid_t* pid, void* func, void* arg), func回调函数就是子进程执行的入口函数, arg是传递给func回调函数的参数.调研popen/system 1 #include<stdio.h> 2 #include<unistd.h> 3 #include&...
2018-10-16 16:15:24
163
原创 一个简单的shell
#include<stdio.h>#include<string.h>#include<unistd.h>#include<stdlib.h>#define NUM 16#define MAX 1024int main(){ char *myargv[NUM]; char cmd[MAX]; while(1){ pri...
2018-10-14 17:11:49
244
原创 C++内存管理方式
C++中通过new和delete运算符进行动态内存管理 如图:注意:new/delete、new[]和delete[]一定匹配使用 C库malloc/free等来动态管理内存,为什么C++还要定义new/delete运算符来动态管理内存呢?因为:c语言是面向过程的语言,错误返回错误码,C++是面向对象的语言,错误要抛异常 malloc/free 只负责分配和释...
2018-10-09 16:37:14
136
原创 进程虚拟地址空间,进程创建
进程创建:解释一下fork函数: 在Linux中fork函数是很重要的函数,它从已经存在的进程中创建一个新进程,新进程称为子进程,原进程称为父进程。 #include<unistd.h> pid_t fork(void); 返回值:子进程返回0,父进程返回子进程的pid,出错返回-1进程调用fork,当控制转移到内核中的fork代码后,内核的做法...
2018-10-08 16:33:02
455
原创 进程状态总结
为什么要有操作系统 管理所有软硬件资源,为用户程序(应用程序)提供一个良好的执行环境 操作系统被定义为一款“搞管理”的软件 底层硬件-->驱动程序-->操作系统-->系统调用接口-->用户操作接口-->用户进程概念:正在执行的程序,担当分配系统资源(cpu时间,内存)的实体描述进程的叫做PCB:进程信息被放在一个叫做进程控制块的数...
2018-10-07 14:09:44
193
原创 linux项目自动化构建工具-make/Makefile
首先介绍一下makefile:1.会不会写makefile,从侧面说明一个人是否具备完成大型工程的能力2.一个工程的源文件很多,按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先 编译哪些文件后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作3.makefile带来的好处就是“自动化编译”,一旦写好,只需要一个make命令,整...
2018-10-06 18:45:32
246
原创 linux权限
linux下有两种权限:root用户和普通用户root用户:可以在linux系统下做任何事情不受限制普通用户:在linux下做有限的事情怎么切换呢? 输入 su 回车 再输入密码(密码不显示出来)就成为root用户了 想切换为普通用户只需要 su [用户名]如图:权限管理:1.文件所有者 2.文件所有者所在的组的用户 3其他用户文件权限的...
2018-10-06 10:37:19
240
原创 linux常见指令二
16.find指令 find 文件 -name 以文件名字的方式进行查找17.grep指令 grep 【选项】 ‘搜寻的字符串’ 文件 在文件中搜索字符串,将找到的行打印出来 -i 忽略大小写搜寻 -n 顺便输出行号 -v 反向选择,显示出咩有‘搜寻字符串’内容的那一行 -c 计算找到‘搜寻字符串’的次数...
2018-10-03 12:37:47
143
原创 linux常见指令总结一
1.ls指令 对于目录,列出该目录下所有目录与文件,对于文件,列出文件名以及其他信息 -a 列出目录下所有文件,包括隐含文件 -l 列出文件的详细信息 -t 以时间排序 -s 在l文件名后输出该文件的大小 -R 列出所有子目录下的文件(递归) -1 一行只输出一个文件2.pwd指令 ...
2018-09-26 17:29:00
882
原创 malloc、calloc、realloc的区别
C语言内存分配方式: 1.从静态存储区分配。 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,例如:全局变量,static变量 2.在栈上创建 在执行函数时,函数内局部变量的存储单元都在栈上创建,函数结束后这些存储单元被释放,栈内存分配运算内置于 处理器的指令集中,效率很高,但是分配的内存...
2018-09-12 17:29:00
162
原创 C++之日期类
学完前面的东西,现在来具体应用一下写一个日期类,具体功能如下:bool LeapYear(int year)//判断是不是闰年int MonthDay(int year, int month)//每月天数的判断Date operator++()//前置++Date operator++(int)//后置++Date operator--()//前置--Date operator...
2018-09-11 22:21:01
126
原创 内联函数和友元函数总结
内联函数 概念:以inline修饰的函数叫做内联函数,编译是C++编译器会在调用内敛函数的地方展开,没有函数压栈 的开销,内联函数提升程序运行的效率 特性:1.Inline是一种用空间换取时间的做法,省去调用函数额外开销,所以代码很长或者有循环/递归的函数不适宜使用内联 2.inline对编译器而言只是一个建议,编...
2018-09-10 18:29:24
608
原创 c++中类的6个默认的成员函数
根据下面的代码你可以更好的理解这6个函数,要看概念可以参考我的前面几篇博客class Test{public: Test(int a = 0) { cout << "构造函数" << this << endl; date = a; } Test(const Test&t) { cout << "拷贝构造"
2018-09-08 14:29:27
163
原创 const和voliate 总结
在C语言中,const修饰某个类型变量,是变量,下面这段代码不能运行const int a=10;int arr[a];但是在C++中,const修饰某个类型变量, 变为常量,上面这段代码就可以运行 类似于宏的属性替换,在编译期间进行替换const使用场景:1.const修饰形参,一般和引用同时使用2.const修饰返回值3.const修饰类数据成员,必须在构...
2018-09-07 18:19:34
770
原创 C语言和C++中的static总结
C语言中的static1.static修饰全局变量,改变了变量的变量的链接属性,使得这个全局变量只能在本文件中访问2.static修饰局部变量,使其生命周期变长,直到程序运行结束才释放,被static修饰的局部变量放在静态区3.static修饰函数,改变了函数的链接属性,只能在本文件中调用,不能被其他文件访问C++中static声明为static的类成员(成员数据或成员函数),...
2018-09-07 13:02:38
185
原创 运算符重载
今天看到一句话觉得很好,送给即将成为程序员的我们: 程序员最关键的是解决问题,不管你之前学没学过, 只要在你职责范围内有需求,你都得想方设法把问题处理C++中预定义的运算符操作对象只能是基本数据类型,但实际上,用户自定义的类型也需要这样的运算操作 这时候就必须在C++中重新定义这些运算符,给予已有运算符新的功能,使它能够用于特定类型执行特定 的操作。运算...
2018-09-06 18:35:55
130
原创 拷贝构造函数和析构函数
拷贝构造函数概念:只有单个形参,而且该形参是对本类类型对象的引用(常用const修饰) 这样的构造函数称为拷贝构造函数,拷贝构造函数是特殊的构造函数,创建对象时使用 已经存在的同类对象来进行初始化,由编译器自动调用 例子:class date{public: date(int year, int month, int day) //构造 : _yea...
2018-09-03 13:32:46
740
原创 构造函数
类的6个默认成员函数:构造函数、拷贝构造函数、析构函数、赋值操作符重载、取地址操作符重载 const修饰的取地址操作符重载接下来的几篇博客会一一为大家介绍这几个成员函数构造函数: 概念:构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时,由编译器自动调用 在...
2018-09-02 11:47:01
145
原创 this指针详解
什么是this指针?当我们进入一个房子之后,可以看见房子里的电视、灯、花草等,但是看不到房子的全貌。对于一个类的实例来说,你可以看到它的成员函数、成员变量,但是实例本身呢?this是一个指针,它时时刻刻指向这个实例具体说明:在建立对象时,系统会为每一个对象分配独立的存储空间,也就是给每个对象中的数据成员都分配有自己独立的存储空间。如果对同一个类定义多个对象,则有多个同样大小的空...
2018-08-31 18:45:41
1058
原创 结构体内存对齐和大小端
结构体怎么对齐?1.第一个成员与结构体变量偏移量为0的地址处开始数2.其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处注意:对齐数,VS中是8,linux中是43.结构体的总大小为最大对齐数(每个成员变量除了第一个成员都有一个对齐数 )的整数倍4.如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的 整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的...
2018-08-30 21:21:07
1008
原创 类和对象总结
类和对象在C中 “数据”和“处理数据的操作(函数)”是分开的,语言本身并没有支持“数据和函数”之间的关联性在C语言结构体中不能定义函数,但是在C++中可以在结构体中定义函数例子:struct student{ char _name[20]; char _sex[5]; int _age; void students(const char* name, char* sex...
2018-08-29 21:25:55
379
原创 引用和命名空间总结
首先回忆一下在c语言中:函数传参有两种方式:1.传值 2.传地址传值:在函数调用过程中会生成一份临时变量,最终把实参的值传给新分配的临时变量 优点:避免了函数调用的副作用。 缺点:无法改变实参的值传地址:通过改变形参来改变实参的值,只能通过指针传递引用的概念:引用不是新定义的一个变量,而是给已经存在的变量取一个别名,编译器不会为引用变量开辟内存...
2018-08-28 19:07:39
2012
原创 缺省参数和函数重载总结
缺省参数概念:缺省参数是声明或定义函数时为函数的参数指定一个默认值,在调用该函数时,如果没有指定实参 则采用该默认值,否则使用指定的实参 例子:缺省参数又分为全缺省参数和半缺省参数注意:1.带缺省值的参数必须放在参数列表的最后面 2.缺省参数不能同时在函数声明和定义中出现...
2018-08-28 13:14:24
537
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人