2.24作业

cpp 复制代码
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>
 
using namespace std;                 
 
class AB{
private:
	int a;
	int b;
public:
	AB(int a=0,int b=0){}
	void seta(int l){a=l;}
	void setb(int l){b=l;}
	int geta(){return a;}
	int getb(){return b;}
};
 
class AA:public AB{
	
	public:
		AA(int ab=0,int bc=0)
		:AB(ab,bc){}
		void setA(int a)
		{
			seta(a);
			setb(a);
		}
		void setB(int a)
		{
			seta(a);
			setb(a);
		}
 
		void show()
		{
			if(geta()==getb())
			{
				cout<<"是正方形"<<endl;
			}else
			{
				cout<<"是长方形"<<endl;
			}
		}
};
 
int main(int argc,const char** argv){
	
	AA aa;
	aa.setA(4);
	aa.setB(5);
	aa.show();
	return 0;
}
 
cpp 复制代码
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>
 
using namespace std;                 
 
class ABC{
private:
	int a;
	int b;
	int c;
public:
	ABC(int a=0,int b=0,int c=0){}
	void seta(int l){a=l;}
	void setb(int l){b=l;}
	void setc(int l){c=l;}
	int geta(){return a;}
	int getb(){return b;}
	int getc(){return c;}
};
 
 
class AAB:public ABC{
	public:
		AAB(int ab=0,int bc=0,int cd=0)
		:ABC(ab,bc,cd){}
		void setA(int a)
		{
			seta(a);
			setb(a);
		}
		void setB(int a)
		{
			seta(a);
			setb(a);
		}
		void setC(int a)
		{
			seta(a);
			setb(a);
		}
	};
 
 
class AAA:public AAB{
	public:
		AAA(int ab=0,int bc=0,int cd=0)
		:AAB(ab,bc,cd){}
		void setA(int a)
		{
			seta(a);
			setb(a);
			setc(a);
		}
		void setB(int a)
		{
			seta(a);
			setb(a);
			setc(a);
		}
		void setC(int a)
		{
			seta(a);
			setb(a);
			setc(a);
		}
 
		void show()
		{
			cout<<geta()<<endl<<getb()<<endl<<getc()<<endl;
 
			if(geta()==getb()&&geta()==getc())
			{
				cout<<"是等边三角形"<<endl;
			}else
			{
				cout<<"不是等边三角形"<<endl;
			}
		}
};
 
int main(int argc,const char** argv){
	
	AAA aaa;
	aaa.AAA::setA(3);
	aaa.AAA::setB(4);
	aaa.AAA::setC(5);
	aaa.AAA::show();
	return 0;
}
 

3.queue

cpp 复制代码
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>
#include <sys/ipc.h>
#include <sys/msg.h>
 
using namespace std; 
 
struct MessageBuf {
    long mtype;     
    char mtext[128];
};
 
class Msg{
private:
	long channel;
	MessageBuf buf;
	key_t key;
	int id;
public:
	Msg(const char* filename);
	Msg& operator[](int c);
//	void send(const char* txt);
	friend void operator<<(Msg& buf,const char* txt);
};
 
 
Msg::Msg(const char* filename)
{
	key=ftok(filename,1);
	id=msgget(key,IPC_CREAT|0666);
	memset(&buf,0,128);
}
 
 
Msg& Msg::operator[](int c)
{
	channel=c;	
	return *this;
}
 
void operator<<( Msg& m,const char* txt)
{
	m.buf.mtype=m.channel;
	strcpy(m.buf.mtext,txt);
	msgsnd(m.id,&m.buf,sizeof(m.buf.mtext),IPC_NOWAIT);
}
 
 
int main(int argc,const char** argv){
 
while(1)
{
	Msg m("ipc");
	long channel;
	cout<<"请选择频道号: ";
	cin>>channel;
	m[channel]<<"hello world";
}
	return 0;
}

queue.read

cpp 复制代码
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>
#include <sys/ipc.h>
#include <sys/msg.h>
 
using namespace std;                
 
struct MessageBuf {
    long mtype;     
    char mtext[128];
};
 
class Msg{
private:
	long channel;
	MessageBuf buf;
	key_t key;
	int id;
public:
	Msg(const char* filename);
	Msg& operator[](int c);
	friend Msg& operator>>(Msg& m,string& s);
};
 
 
Msg::Msg(const char* filename)
{
	key=ftok(filename,1);
	id=msgget(key,IPC_CREAT|0666);
	memset(&buf,0,128);
}
 
 
Msg& Msg::operator[](int c)
{
	channel=c;	
	return *this;
}
 
 
Msg& operator>>(Msg& m,string& s)
{
	
	m.buf.mtype=m.channel;
	msgrcv(m.id,&m.buf,sizeof(m.buf.mtext),m.channel,IPC_NOWAIT);
	s=m.buf.mtext;
	return m;
}
 
int main(int argc,const char** argv){
while(1)
{
	Msg m("ipc");
	long channel;
	cout<<"请选择频道号: ";
	cin>>channel;
	string str;
	m[channel]>>str;
	cout<<str<<endl;
}
	
}
cpp 复制代码
lude <sys/ipc.h>
#include <semaphore.h>
#include <sys/sem.h>
 
using namespace std;
 
class Sem{
private:
	key_t key;
	int id;
	int index;
public:
	Sem(const char* filename,int n,int val){
		key = ftok(filename,1);
		id = semget(key,n,IPC_CREAT | 0666);
		for(int i=0;i<n;i++){
			semctl(id,i,SETVAL,val);
		}
	}
 
	~Sem(){
		semctl(id,0,IPC_RMID);
	}
 
	friend Sem& operator+(Sem& l,int val);
	friend Sem& operator-(Sem& l,int val);
	Sem& operator[](int index);
 
	Sem& operator++(int);
	Sem& operator--(int);
};
 
 
// Sem s
// s + 1解锁
// s - 1 上锁
// s + 1 + 1 + 1 - 2 - 3
// int(4) + 3
Sem& operator+(Sem& l,int val){
	sembuf buf = {0};
	buf.sem_num = l.index;
	buf.sem_op = abs(val);
	buf.sem_flg = SEM_UNDO;
	semop(l.id,&buf,1);
	return l;
}
 
Sem& Sem::operator++(int)
{
	sembuf buf = {0};
	buf.sem_num =this->index;
	buf.sem_op = 1;
	buf.sem_flg = SEM_UNDO;
	semop(this->id,&buf,1);
	return *this;
}
 
 
 
/*
	Sem s;
	s[0] - 1  s.index = 0确定好了
*/
 
Sem& operator-( Sem& l,int val){
    sembuf buf = {0};
    buf.sem_num = l.index;
    buf.sem_op = -abs(val);
    buf.sem_flg = SEM_UNDO;
    semop(l.id,&buf,1); 
	return l;                    
}
 
 
Sem& Sem::operator--(int)
{
	sembuf buf = {0};
    buf.sem_num = this->index;
    buf.sem_op = -1;
    buf.sem_flg = SEM_UNDO;
    semop(this->id,&buf,1); 
	return *this; 
}
 
 
Sem& Sem::operator[](int index){
	this->index = index;
	return *this;
}
相关推荐
YuTaoShao11 分钟前
Java八股文——数据结构「排序算法篇」
java·数据结构·算法·面试·排序算法·八股文
电院工程师2 小时前
SM3算法C语言实现(无第三方库,带测试)
c语言·算法·安全·密码学
Hello.Reader3 小时前
RediSearch 查询语法速览
前端·算法
generallizhong3 小时前
android 省市区联动选择
android·java·算法
YGGP5 小时前
LeetCode 662. 二叉树的最大宽度
算法
周圣贤7 小时前
九尾狐编程语言新算法“超维时空演算体”
开发语言·算法
军训猫猫头10 小时前
100.Complex[]同时储存实数和虚数两组double的数组 C#例子
算法·c#·信号处理
int型码农10 小时前
数据结构第八章(五)-外部排序和败者树
c语言·数据结构·算法·排序算法
好易学·数据结构11 小时前
可视化图解算法52:数据流中的中位数
数据结构·算法·leetcode·面试·力扣·笔试·牛客
dying_man11 小时前
LeetCode--35.搜索插入位置
算法·leetcode