c++day4

发布于:2025-02-25 ⋅ 阅读:(8) ⋅ 点赞:(0)

作业

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>

using namespace std;                 

class S{
private:
	int a;
	int b;
public:
	S(int a=0,int b=0):a(a),b(b){}
	void setA(int l){a=l;}
	void setB(int l){b=l;}
	int getA(){return a;}
	int getB(){return b;}
};

class Z:public S
{
public:
	Z(int ab=0)
	:S(ab,ab)
	{}
	void setA(int a)
	{
		S::setA(a);
		S::setB(a);
	}
	void setB(int b)
	{
		S::setA(b);
		S::setB(b);
	}
};

int main(int argc,const char** argv)
{
	Z ab;
	ab.setA(3);
	ab.setB(4);
}

#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):a(a),b(b),c(c){}
	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 AAC:public ABC
{
public:
	AAC(int ab=0,int c=0)
		:ABC(ab,ab,c)
	{}

	void setA(int a)
	{
		ABC::setA(a);
		ABC::setB(a);
	}

	void setB(int b)
	{
		ABC::setA(b);
		ABC::setB(b);
	}

	void setC(int c)
	{
		ABC::setA(c);
		ABC::setB(c);
	}
};

class AAA:public AAC
{
public:
	AAA(int ab=0)
		:AAC(ab,ab)
	{}

	void setA(int a)
	{
		AAC::setA(a);
		AAC::ABC::setC(a);
	}
	
	void setB(int b)
	{
		AAC::setB(b);
		AAC::ABC::setC(b);
	}

	void setC(int c)
	{
		AAC::setC(c);
		AAC::ABC::setC(c);
	}
};

int main(int argc,const char** argv)
{
	AAC aac;
	aac.setA(4);
	aac.setB(5);
	aac.setC(6);

	AAA aaa;
	aaa.setA(5);
	aaa.setB(7);
	aaa.setC(13);
}

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>


using namespace std;

class Msg{
private:
	key_t key;
	int id;
	int channel;
	struct msgbuf{
		long channel;
		char text[512];
	};
public:
	Msg(const string& filename = ""){
		key = ftok(filename.data(),1);
		id = msgget(key,IPC_CREAT | 0666);
	}

	~Msg(){
		msgctl(id,IPC_RMID,0);
	}
	void send(const string& str){
		msgbuf buf = {0};	
		strcpy(buf.text,str.data());
		buf.channel = channel;
		msgsnd(id,&buf,str.length(),0);
	}
	string recv(int size=512){
		msgbuf buf = {0};
		msgrcv(id,&buf,size,channel,0);
		string str = buf.text;
		return str;
	}
	Msg& operator<<(const string& str)
	{
		send(str);
		return *this;
	}
	Msg& operator>>(string& str)
	{
		str = recv();
		return *this;
	}
	Msg& operator[](int channel);
};

Msg& Msg::operator[](int channel){
	this->channel = channel;
	return *this;
}

int main(int argc,const char** argv){
	Msg m("./ipc");
	m[1] << "helloworld";
	string str;
	m[1] >> str;
	cout << str << endl;
}

 

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>

using namespace std;                 

class Sem{
private:
	key_t key;
	int id;
	int index;
public:
	Sem(int x,int y)
	{
		key = ftok("./ipc",2);
		id = semget(key,x,IPC_CREAT | 0666);
		for(int i=0;i<x;i++)
		{
			semctl(id,i,SETVAL,y);
		}
	}

	void init(int y)
	{
		semctl(id,index,SETVAL,y);
	}

	Sem& operator-(int y)
	{
		struct sembuf buf = {0};
		buf.sem_num = index;
		buf.sem_op = -abs(y);
		buf.sem_flg = SEM_UNDO;
		semop(id,&buf,1);
		return *this;
	}

	Sem& operator+(int y)
	{
		struct sembuf buf = {0};
		buf.sem_num = index;
		buf.sem_op = abs(y);
		buf.sem_flg = SEM_UNDO;
		semop(id,&buf,1);
		return *this;
	}
	Sem& operator++()
	{
		return *this+1;
	}
	Sem& operator--()
	{
		return *this-1;
	}
	Sem& operator[](int y)
	{
		index = y;
		return *this;
	}

	~Sem()
	{
		semctl(id,1,IPC_RMID);
	}
};

int main(int argc,const char** argv)
{
	Sem s(3,0);
	s[1].init(10);
	s[1] + 1;
	s[1] - 1;
	
}