运算符重载 #include<iostream> using namespace std; class CInt { friend ostream& operator<<(ostream& out,const CInt & timp); private: int i; public: CInt (int d) { i=d; }; CInt(const CInt &timp) { i=timp.i; } public: CInt operator+(const CInt &timp)const //CInt add(const CInt &timp)const { return(i+timp.i); } CInt add(const CInt &timp)const { return(i+timp.i); } 继续阅读 >>


高嘉两 17/12/19 22:47:12
deepin添加PPA源 PPA,也就是“Personal Package Archives(个人软件包档案)”是Ubuntu Launchpad网站提供的一项服务,允许个人用户上传软件源代码,通过Launchpad进行编译并发布为2进制软件包,作为apt/新立得源供其他用户下载和更新。Ubuntu用户使用PPA源将更加方便的获得软件的最新版本. 问题是,PPA是Ubuntu提供的,其他Linux系统不能直接使用。下面就是在deppni上添加PPA源,下载软件。以codeblocks为例。. 1. 修改 /etc/lsb-release,伪装成ubuntu: DISTRIB_ID=Ubuntu DISTRIB_RELEASE=15.10 DISTRIB_CODENAME=wily DISTRIB-DESCRIPTION="Ubuntu wily" 2. 安装支持“add-apt-repository”: sudo apt-get install python-software-properties sudo apt-get insta 继续阅读 >>


高嘉两 17/12/09 13:29:21
#include<iostream> class CFrist { int data; public: CFrist(int d=0)//构造函数 { data=d; } CFrist(CFrist &timp)//拷贝构造函数 { data=timp.data; } /*1.与构造函数一样,但参数是独特的,如果不写系统会给出一个默认的拷贝构造函数,会把对应成员赋值; 2.并且这里一定要用引用,不能直接传值.函数传对象会调用拷贝构造函数(下面有详细说明) 所以如果在调用拷贝构造函数时传入对象,就又会调用一次拷贝构造函数,就会无限循环下去. 3.拷贝构造函数在构造对象时对对象赋值一个对象的时候才会被调用,单纯的赋值的时候不会被调用. */ ~CFrist(){} }; CFrist text(CFrist t5) {/*函数传参传入一个对象,函数内部就会*构造t5对象并将传入的对象赋值给t5*,这就符合构 继续阅读 >>


高嘉两 17/11/19 16:24:08
构造与析构函数 好久没有写博客了….趁着正在学习c++把博客捡起来. 嗯….本次是关于构造函数和析构函数的笔记 引入:对对象在构建的时候对其进行初始化. 可以自己写一个函数对所有数据进行初始化 class Frist { int a; public://手动写一个初始化函数 void init(int d=5)//这里用了缺省值,如果调用时写了(传入)该参数,则d的值为该参数,没写就默认为5. { a=d; } }; int main() { Frist one,two; one.init();//没有d默认为5 two.init(2); //有d为2 } 这样自己定义有点小瞧c++了,在c++中有更好的方法来初始化对象. 构造函数 其实,c++在构造对象时,首先会进行一个特有的构造函数. 首先进行:即是一定会首先自动调用这个函数(该函数一般用来初始化,但语句你可以自己写) 特有的:每构造一个对象就会调用一次,且只会调用一次,以后就不用了. 构造函数特点: 继续阅读 >>


高嘉两 17/11/05 13:56:05
在线程这一章节里感觉比进程更然了,进程呢一般你创建了他,他就会继承父进程,然后单独再开辟一块空间。在自己的地盘上做操作,都不会影响其他进程。而线程就不一样了,如果你使用了全局变量。他由于调度问题,你胡乱改,出现各种意想不到结果。灰常坑。。。 一下总结几个代码,记录一些坑点。。。 1 #include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <signal.h> #include <ctype.h> #include<stdlib.h> /* 允许建立的子进程个数最大值 */ #define MAX_CHILD_NUMBER 10 /* 子进程睡眠时间 */ #define SLEEP_INTERVAL 2 int proc_number=0; /* 子进程的自编号,从0开始 */ void do_something(); int main(int argc, char* argv[]) { 继续阅读 >>


高嘉两 17/08/04 19:33:01
开始看线程池感觉十分懵逼,什么任务,任务对列,不知道是什么东西。但是在网上找了一篇注释详细一点的代码,仔细看看一遍,就慢慢清楚他大概是个什么,大概是怎么实现的。一边看一遍加注释,会帮助你理解。下面是我当时参考的一篇博客,有一个线程池代码,比较简单清晰。 :http://blog.csdn.net/zouxinfox/article/details/3560891 看懂后就可以自己照着敲一遍,你的理解就会更深刻; 下面是我自己的代码,和那篇博客差不多,但是注释更详细一些。 如果有大佬发现有问题,欢迎评论。^_^ #include<stdio.h> #include<stdlib.h> #include<pthread.h>//锁 #include <unistd.h> #define N 3 void * run_pthread(); typedef struct worker //任务通用结构体(所谓通用是因为每个任务可能不同) { void *(*work)(void *a 继续阅读 >>


高嘉两 17/08/03 23:45:42
最近学了fork,讨论了几个有意思的问题,对fork理解更深了一些,记录一下 1,vfork #include<stdio.h> #include<unistd.h> #include<sys/types.h> int a=10; int main() { int b=20; pid_t pid; pid =vfork(); if(pid==0) { b++; return 0;//exit (0);//用exit和return各执行一次 } printf("%d %d",a,b); } 当我们用return ,他会告诉我们段错区。如果是exit就会正常输出,为什么呢? 我们知道vfork之后,子进程完全运行在父进程的地址空间上,子进程对该地址空间中的任意数据的修改同样为父进程所见。所以子进程对b++后父进程的b也就是21了。 但为什么用exit和return会不同呢?这就是return和exit的区别了。 retur 继续阅读 >>


高嘉两 17/07/30 16:17:26
自己敲的创建守护进程,详细过程在注释里。。。自己总结的笔记吧。。。 注意编号0—7,算是大概步骤,守护进程就算结束了 8是检测。。。方法是将一个字符串不断地追加在一个文件里,如果成功就可以通过看到文件越来越长。。。 #include< stdio.h> #include< string.h> #include< stdlib.h> #include< sys/types.h> #include< fcntl.h> #include< unistd.h> #include< signal.h> //sigal #include< sys/stat.h> #include< syslog.h> #include< sys/param.h> //包含NOFILE #include < sys/wait.h > int main() { //0.屏蔽一些有关控制终端操作的信号。这是为 继续阅读 >>


高嘉两 17/07/26 23:13:19
敲代码时候需要动态声明一个二维数组,然后开始然,然不清,然后发现指针也然不清了...然后总结一些笔记关于数组,指针,malloc,free。 变量 //数组与指针关系 int a; int *p; p=&a; //malloc int *p=(int *)malloc(sizeof(int )); //free free(p); 一维数组 //数组与指针关系 int a[N]; int *p; p=a; //malloc int *p=(int *)malloc(sizeof(int )*N); //free free(p); 二维数组 1.数组指针 //数组与指针关系 int a[N][M]; int (*p)[M]=a; //(*p)是一个指针,类型是int(*)[M];即指向int型的长度为M的一维数组,(因为之前a声明的数组大小是N*M,所以可以通过p++或p[N]来访问不同行,这里也可以看出一点二维数组a在定义的时候的类型是int (*)[]型,这也许就是不能把一个二维数组赋给一个二级指针 继续阅读 >>


高嘉两 17/07/23 16:53:21
int chmod(*char,int ):系统调用修改文件访问权限属性函数 头文件:#include < sys/types.h > ,include < sys/stat.h > 返回值:失败返回-1 成功返回0; 传入值: 第一个为文件名,可以是文件自己的名字(即可以修改文件自己的访问权限) 这里要注意一下修改自己包括源文件和可执行文件注意两个文件的名字不同 第二个为权限类型 1.chmod(“gjldw”,0777);//传入一个八进制数(0开头,这样有个问题,没法用一个整形变量来表示一个0开头的数,只能固定一个权限。所以有下面这个方法) 2.chmod(“gjldw”,511);//传入一个十进制数(这个由八进制算来的,0777=511,所以就可以通过一个变量来储存511,可以按照不同的要求进行相应的权限修改) 3chmod(“gjldw”,S_IRUSR|S_ISGID |S_ISVTX |…);//传入字符常量值(这样问题和第一个一样。具体的字符常量和对应八进制如下:) S_ISUID 04000 文件的 继续阅读 >>


高嘉两 17/07/17 19:47:58