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;
}
相关推荐
黄昏ivi8 分钟前
事件触发控制与响应驱动控制的定义、种类及区别
人工智能·分布式·学习·算法·机器学习
温文尔雅透你娘15 分钟前
摄像头在自动驾驶中的核心应用:感知算法与技术方案深度解析
人工智能·算法·计算机视觉·目标跟踪·自动驾驶
Vacant Seat18 分钟前
贪心算法-跳跃游戏
算法·游戏·贪心算法
是小满满满满吗21 分钟前
基础贪心算法集合2(10题)
算法·贪心算法
小林熬夜学编程22 分钟前
【高阶数据结构】第三弹---图的存储与遍历详解:邻接表构建与邻接矩阵的BFS/DFS实现
c语言·数据结构·c++·算法·深度优先·图论·宽度优先
谢道韫6661 小时前
37-串联所有单词的子串
开发语言·算法·c#
爱编程的小新☆1 小时前
2025年第十六届蓝桥杯省赛JavaB组真题回顾
算法·职场和发展·蓝桥杯
callJJ1 小时前
Dijkstra算法求解最短路径—— 从零开始的图论讲解(2)
java·数据结构·算法·intellij-idea·图论·dijkstra·图搜索算法
uhakadotcom1 小时前
入门教程:Keras和PyTorch深度学习框架对比
后端·算法·面试
PHASELESS4111 小时前
Java二叉树深度解析:结构、算法与应用实践指南
java·开发语言·数据结构·算法