c++day4

作业

复制代码
#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;
	
}
相关推荐
沐知全栈开发17 分钟前
MongoDB 创建数据库
开发语言
pystraf33 分钟前
UOJ 228 基础数据结构练习题 Solution
数据结构·c++·算法·线段树
ErizJ36 分钟前
Golang | 迭代器模式
开发语言·golang·迭代器模式
牙痛不能吃糖,哭39 分钟前
C++面试复习日记(8)2025.4.25,malloc,free和new,delete的区别
开发语言·c++
健康的猪42 分钟前
golang的cgo的一点小心得
开发语言·后端·golang
夜夜敲码1 小时前
C语言教程(十六): C 语言字符串详解
c语言·开发语言
宋康1 小时前
C语言结构体和union内存对齐
c语言·开发语言
居然是阿宋1 小时前
Kotlin高阶函数 vs Lambda表达式:关键区别与协作关系
android·开发语言·kotlin
ChoSeitaku2 小时前
17.QT-Qt窗口-工具栏|状态栏|浮动窗口|设置停靠位置|设置浮动属性|设置移动属性|拉伸系数|添加控件(C++)
c++·qt·命令模式
Cao1234567893212 小时前
简易学生成绩管理系统(C语言)
c语言·开发语言