自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++之友元函数和友元类

一、友元函数和友元类1.1为什么要使用友元函数    在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。    实际上具体大概有下面两种情况需要使用友元函数:

2017-10-10 14:39:45 291

原创 C++之全局函数与成员函数的转换

一、全局函数和成员函数1、把全局函数转化成成员函数,通过this指针隐藏左操作数Test add(Test &t1, Test &t2)===》Test add(Test &t2)2、把成员函数转换成全局函数,多了一个参数void printAB()===》void printAB(Test *pthis)3、函数返回元素和返回引用Test& add(Test &t

2017-10-10 14:38:24 1404

原创 C++之对象的动态创建和释放

////程序分析#include #include // malloc 和 free:它们本身不是C语言的语法的一部分,是库函数提供的 函数// new 和 delete: 它们本身是C++语言的一部分,是 运算符 不是 函数// 创建普通类型变量int main12_1(){ int *p1 = (int *)malloc(sizeof(int)); free(p1);

2017-09-20 19:33:39 406

原创 C++之静态成员变量和静态成员函数

一、静态成员变量1)关键字 static 可以用于说明一个类的成员,    静态成员提供了一个同类对象的共享机制  2)把一个类的成员说明为 static 时,这个类无论有多少个对象被创建,这些对象共享这个 static 成员  3)静态成员局部于类,它不是对象成员,在类的外部进行初始化二、静态成员函数1)静态成员函数数冠以关键字static2)静态成员函数

2017-09-20 19:31:36 274

原创 C++之构造函数和析构函数的调用顺序

1)当类中有成员变量是其它类的对象时,首先调用成员变量的构造函数,调用顺序与声明顺序相同;之后调用自身类的构造函数2)析构函数的调用顺序与对应的构造函数调用顺序相反#include class Test9_1{public: Test9_1 (int a) { m_a = a; printf ("9_1 1111111111111111111构造函数....a: %d\

2017-09-20 19:27:39 320

原创 C++之 深拷贝和浅拷贝

#include #include using namespace std; class Name{public: Name(const char *p) { m_len = strlen(p); m_p = (char *)malloc(m_len + 1); } ~Name() { co

2017-09-20 19:24:34 328

原创 对象的构造与析构(2) 构造函数规则

1)当类中没有定义任何一个构造函数时,c++编译器会提供默认无参构造函数和默认拷贝构造函数2)当类中定义了拷贝构造函数时,c++编译器不会提供无参数构造函数3)当类中定义了任意的非拷贝构造函数(即:当类中提供了有参构造函数或无参构造函数),c++编译器不会提供默认无参构造函数4 )默认拷贝构造函数成员变量简单赋值总结:只要你写了构造函数,那么你必须用。 构造析构阶段性总结

2017-09-20 19:22:03 297

原创 C++对象的构造和析构

一、构造函数1、声明:1)C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数;语法:ClassName()2)构造函数在定义时可以有参数;3)没有任何返回类型的声明。 2、调用自动调用:一般情况下C++编译器会自动调用构造函数手动调用:在一些情况下则需要手工调用构造函数二、析构函数1、声明:1)C++中的类可以定义

2017-09-20 17:24:32 341

原创 类的声明与类的实现分开 点和圆

设计一个圆形类(AdvCircle),和一个点类(Point),计算点在圆内部还是圆外即:求点和圆的关系(圆内和圆外)point.h#ifndef __POINT_H__#define __POINT_H__class Point{public: // 设置点的坐标 void setXY(int x, int y); int getX(); int getY();

2017-09-18 17:30:59 596

原创 C++之类的封装

A)封装,是面向对象程序设计最基本的特性。把数据(属性)和函数(操作)合成一个整体,这在计算机世界中是用类与对象实现的。B)封装,把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。      备注:有2层含义(把属性和方法进行封装 对属性和方法进行访问控制)      C++中类的封装成员变量,C++中用于表示类属性的变量成

2017-09-18 17:25:29 618

原创 C++对C的函数扩展

一、内联函数#include #define MAX(a, b) f((a) > (b) ? (a) : (b)) void f (int max){ printf ("max = %d\n", max);}// 内联函数代替宏函数// 在普通函数前加 关键字 inline 将函数变成内联函数// inline 必须要和函数定义放一起,如果和函数声明放一起会被忽

2017-09-18 14:42:17 478

原创 C++中const和C++的引用

一、C++与C语言中const的比较1、C语言中#include int main(){ // C语言中 const修饰的变量是一个 常变量,本质还是变量,有自己的地址空间 const int a = 10; int *p = (int *)&a; *p = 5; printf ("%d\n", a); return 0;}

2017-09-18 14:24:46 439

原创 C++对C的加强

一、命名空间1、为什么要引入命名空间一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突。 例如小李和小韩都参与了一个文件管理系统的开发,它们都定义了一个全局变量 fp,用来指明当前打开的文件,将他们的代码整合在一起编译时,很明显编译器会提示 fp 重复定义

2017-09-16 10:31:22 312

原创 条件变量

假设有这样一种情况:线程正在等待共享数据内某个条件出现,这时必须先解锁,否则其他线程不可能更改共享数据。一种实现方式是,可以循环检测共享数据,但是在检测前要加锁,检测后又要解锁,这样效率会很低。        因此,在这种情况下,需要一种方法,使得当线程在等待某些条件的满足时进入睡眠状态,一旦条件满足,线程就应该被唤醒继续执行。这个方法就是使用POSIX条件变量。  1、初始化PO

2017-08-17 10:39:24 280

原创 生产者/消费者模型改进版 ——队列

上述消费者/生产者模型比较简单,缓冲区中只能容纳一条消息。生产者每提交一条消息到缓冲区中,就会通知消费者,等消费者取走消息之后才能提交下一条消息。同样,消费者也必须等待生产者提交一条消息后才能进行处理。这种设计的效率是比较低下的。    如果将缓冲区设计为一个先进先出的队列,可以同时容纳多条消息,那么只要缓冲区不满,生产者就可以提交消息;同时,只要缓冲区不空,消费者就可以取出消息进行处理。这将

2017-08-17 10:37:26 419

原创 生产者/消费者模型

多线程并发应用程序有一个经典的模型,即生产者/消费者模型。系统中,产生消息的是生产者,处理消息的是消费者,消费者和生产者通过一个缓冲区进行消息传递。生产者产生消息后提交到缓冲区,然后通知消费者可以从中取出消息进行处理。消费者处理完信息后,通知生产者可以继续提供消息。        要实现这个模型,关键在于消费者和生产者这两个线程进行同步。也就是说:只有缓冲区中有消息时,消费者才能够提取消息

2017-08-17 10:34:45 269

原创 多线程程序设计

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属于一个进程的其他的线程共享进程拥有的全部资源。       Linux进程创建一个新线程时,线程将拥有自己的栈(因为线程有自己的局部变量),但与它的创建者共享全局变量、文件描述符、信号句柄和当

2017-08-17 10:23:38 252

原创 卖票系统

#include #include #include #include #include #include typedef struct _shm{ int flag; int ticket;}SHM;void sellTicket(SHM* pshm){ while (1) { int time = rand() % 10 + 1; usleep(t

2017-08-14 17:14:35 335

原创 共享内存的实现

共享内存实现分两个步骤:1、创建共享内存,使用shmget函数2、映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数。shmget:int shmget(key_t key, int size, int shmflg) key:1、0/IPC_PRIVATE:当key的取值为IPC_PRIVATE,则函数shmget()将创建一块新

2017-08-14 10:32:17 446

原创 命名管道的创建和使用

命名管道(FIFO)和无名管道基本相同,但也有不同点:无名管道只能由父子进程使用;但是通过命名管道,不相关的进程也能交换数据。#include #include  int mkfifo(const char *pathname, mode_t mode); pathname: FIFO文件名mode:属性(同文件操作) 一旦创建了一个FIFO,就可用op

2017-08-14 10:30:19 1255

原创 父子进程通过管道实现文件复制

利用管道实现文件复制:1、父程序读端关闭,写端先将文件数据写入管道;2、子程序将写端关闭,然后从管道里读文件数据。#include #include #include #include #include #include #define SIZE 1024// 子进程通过管道从父进程接收数据void child_do(int *fd){ //关闭管道写端 cl

2017-08-14 09:34:31 734

原创 守护进程

同样我们需要了解一下什么是守护进程,守护进程就是在后台运行,不与任何终端关联的进程,通常情况下守护进程在系统启动时就在运行,它们以root用户或者其他特殊用户(apache和postfix)运行,并能处理一些系统级的任务.习惯上守护进程的名字通常以d结尾(sshd),但这些不是必须的.下面介绍一下创建守护进程的步骤:· 调用fork(),创建新进程,它会是将来的守护进程. · 

2017-08-11 20:58:02 279

原创 通讯录

/*******************************************************************需求:制作一个电子通讯录,通过该通讯录能录入好友ID号、姓名(英文)、手机号码,家庭住址,公司电话。模块:主界面:主要显示软件功能,A)添加好友信息 B)列表好友信息。(包含排序功能) C)搜索好友 D)删除好友A)用户输入INSERT命令

2017-08-10 16:31:51 399

原创 text1 + text2 =text3

手动创建两个文本文件text1.txt,text2.txt,要求编程创建text3.txt,实现text1.txt和text2.txt文件中除去首行和末尾对应的数据相加,三个文本的内容如下#include #define SIZE 10int main(){ FILE *fp1 = fopen("text1.txt","ab+"); if(fp1 == NUL

2017-08-08 15:00:40 741

原创 快速排序

#include // 交换函数void swap (int a[], int i, int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;}// 打印数组void printA (int *a, int len){int i;for (i = 0; i {printf ("%4d", a[

2017-08-07 09:02:24 219

原创 归并排序

#include // 交换函数void swap (int a[], int i, int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;}// 打印数组void printA (int *a, int len){int i;for (i = 0; i {printf ("%4d", a[

2017-08-07 09:01:47 191

原创 堆排序

#include // 交换函数void swap (int a[], int i, int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;}// 打印数组void printA (int *a, int len){int i;for (i = 0; i {printf ("%4d", a[

2017-08-07 09:00:57 191

原创 插入排序 二分插入排序

#include // 交换函数void swap (int a[], int i, int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;}// 打印数组void printA (int *a, int len){int i;for (i = 0; i {printf ("%4d", a[

2017-08-07 09:00:27 334

原创 选择排序

#include // 交换函数void swap (int a[], int i, int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;}// 打印数组void printA (int *a, int len){int i;for (i = 0; i {printf ("%4d", a[

2017-08-07 08:59:03 173

原创 冒泡排序 鸡尾酒排序

#include // 交换函数void swap (int a[], int i, int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;}// 打印数组void printA (int *a, int len){int i;for (i = 0; i {printf ("%4d", a[

2017-08-07 08:57:15 295

原创 希尔排序

#include // 交换函数void swap (int a[], int i, int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;}// 打印数组void printA (int *a, int len){int i;for (i = 0; i {printf ("%4d", a[

2017-08-03 21:13:54 224

原创 计算器

#include #include #include #define MAX 100#define PUSH    0#define PUSH_NO 1typedef struct {int num[MAX];int top;}Num;typedef struct{char str[MAX];int top;}ch

2017-07-27 20:54:53 257

翻译 顺序栈的基本用法

#ifndef __ERROR_H__#define __ERROR_H__#include #define ERROR         -1#define FULL_STACK    -2#define EMPTY_STACK   -3int errno;     // 错误号void myError(char *str);

2017-07-26 22:53:09 323

原创 顺序表函数

#include "SeqList.h"#include #include SeqList *Create_List(){// 创建一个顺序表SeqList* s = (SeqList*)malloc(sizeof(SeqList)/sizeof(char));if (s == NULL){return NULL;}// 初始化顺序的成员

2017-07-23 22:37:11 560

翻译 一道约瑟夫的题目

/* * 约瑟夫环的再学习 * 有n个人围成一圈,从第一个人开始进行1~m的报数,报到m的人退出, * 问最后留下来的那个是第几个人。 * */#includeint main(){int arr[1000];int n,m;int i,p=0,q;printf("请输入人数:");scanf("%d",&n);printf("请

2017-07-21 23:19:13 250

原创 找合法帧 QAQ

输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来.提示:帧头和帧尾分别是head和tail  字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧#include #include // 在字符串str中寻找字符串sub,如果找到返回从sub开始的字符串char

2017-07-20 22:44:44 266

原创 C语言函数

话说大诗人李白,一生好饮。幸好他从不开车。    一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:    无事街上走,提壶去打酒。    逢店加一倍,遇花喝一斗。    这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。     请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb

2017-07-18 20:28:59 305

原创 编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,及将句子中的单词位置倒置,而不改变单词内部结构.

/*****************************************************copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. File name:Author:Jerey_Jobs    Version:0.1    Date: Description:Funcion List:

2017-07-17 19:28:59 375

原创 strcmp(str1,str2)函数用法

#include #include int main (){char str1[100] = "asd";char str2[] = "asd";char *p1 = str1;char *p2 = str2;while (1){if(*(p1++) != *(p2++)){break;}if (*p1 == '\0' &&

2017-07-16 22:30:01 5941

原创

好累呀,明天继续学习 不对 是今天了

2017-07-15 00:45:55 205

空空如也

空空如也

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

TA关注的人

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