2.22 c++练习【operator运算符重载、封装消息队列、封装信号灯集】

1. operator运算符重载

创建mystring实现以下功能

mystring str = "hello"

mystring ptr = "world"

str = str + ptr;

str += ptr

str[0] = 'H'

cpp 复制代码
#include <iostream>

using namespace std;

class mystring{

private:
	string str;
public:
	
	mystring(const string &str):str(str)
	{

	}

	mystring  operator+(const mystring& l)
	{
		return mystring(str+l.str);
	}

	mystring &operator+=(const mystring& l)
	{
		str+=l.str;
		return *this;
	}

	void show()
	{
		cout<<str<<endl;
	}
};

int main()
{
	mystring str("hello");
	mystring ptr("world");

	str=str+ptr;
	str.show();
	str+=ptr;
	str.show();


return 0;
}

2.封装消息队列

2.封装消息队列

class Msg{

key_t key

int id;

int channel

}

实现以下功能

Msg m("文件名")

m[1].send("数据"),将数据发送到1号频道中

string str = m[1].read(int size) 从1号频道中读取消息,并且返回

编写程序测试

cpp 复制代码
#include <iostream>
#include <sys/ipc.h>
#include <sys/msg.h>
#include<cstring>

using namespace std;

class Msg{

	private:
		key_t key;
		int id;

		struct Msgbuf{
			long channel;
			char buf[128];
		};

	public:
		class Channel {

			private:

				int id;
				long channel;

			public:
				Channel(int id,long ch):id(id),channel(ch){}

				//发送数据
				void send (const string &data)
				{
					Msgbuf msg;
					msg.channel=channel;
					strncpy(msg.buf,data.c_str(),127);
					msgsnd(id,&msg,strlen(msg.buf),0);
				}

				//读取数据
				string read(int size)
				{
					Msgbuf msg;
					memset(&msg,0,sizeof(msg));
					msgrcv(id,&msg,size,channel,IPC_NOWAIT);
					return string(msg.buf);

				}


		};

		//构造函数
		Msg(const string &filename)
		{
			key=ftok("./ipc",2);
			id=msgget(key,IPC_CREAT|0666);

		}

		//重载
		Channel operator[](int ch)
		{
			return Channel(id,ch);
		}

};

int main()
{
	Msg m("./ipc");;

	m[1].send("hello");
	string str =m[1].read(128);

	cout<<str<<endl;

	return 0;
}

3. 封装信号灯集

封装信号灯集

class Sem{

key_t key

int id;

int index

}

实现以下功能

Sem s(参数x,参数y):创建信号灯集,信号灯集中存在 x 个信号量,并且将所有信号量初始化为 y

s.init[1](10):手动初始化信号灯集中的第1个信号量,初始化成 10

s[1] + 1 让信号灯集中的第1个信号量的值 +1

s[1] - 1 让信号灯集中的第1个信号量的值 -1

编写程序测试

相关推荐
AA陈超32 分钟前
虚幻引擎UE5专用服务器游戏开发-20 添加基础能力类与连招能力
c++·游戏·ue5·游戏引擎·虚幻
mit6.8241 小时前
[Meetily后端框架] AI摘要结构化 | `SummaryResponse`模型 | Pydantic库 | vs marshmallow库
c++·人工智能·后端
screenCui1 小时前
macOS运行python程序遇libiomp5.dylib库冲突错误解决方案
开发语言·python·macos
R-G-B1 小时前
【02】MFC入门到精通——MFC 手动添加创建新的对话框模板
c++·mfc·mfc 手动添加创建新的对话框
linux kernel1 小时前
第七讲:C++中的string类
开发语言·c++
Tipriest_1 小时前
[数据结构与算法] 优先队列 | 最小堆 C++
c++·优先队列·数据结构与算法·最小堆
玩代码1 小时前
Java线程池原理概述
java·开发语言·线程池
宛西南浪漫戈命2 小时前
Centos 7下使用C++使用Rdkafka库实现生产者消费者
c++·centos·linq
泰勒疯狂展开2 小时前
Java研学-MongoDB(三)
java·开发语言·mongodb
zzywxc7872 小时前
AI技术通过提示词工程(Prompt Engineering)正在深度重塑职场生态和行业格局,这种变革不仅体现在效率提升,更在重构人机协作模式。
java·大数据·开发语言·人工智能·spring·重构·prompt