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

编写程序测试

相关推荐
nbsaas-boot5 小时前
Java 正则表达式白皮书:语法详解、工程实践与常用表达式库
开发语言·python·mysql
岁忧5 小时前
(LeetCode 面试经典 150 题 ) 11. 盛最多水的容器 (贪心+双指针)
java·c++·算法·leetcode·面试·go
chao_7895 小时前
二分查找篇——搜索旋转排序数组【LeetCode】两次二分查找
开发语言·数据结构·python·算法·leetcode
风无雨5 小时前
GO 启动 简单服务
开发语言·后端·golang
斯普信专业组5 小时前
Go语言包管理完全指南:从基础到最佳实践
开发语言·后端·golang
我是苏苏7 小时前
C#基础:Winform桌面开发中窗体之间的数据传递
开发语言·c#
斐波娜娜7 小时前
Maven详解
java·开发语言·maven
小码氓8 小时前
Java填充Word模板
java·开发语言·spring·word
暮鹤筠8 小时前
[C语言初阶]操作符
c语言·开发语言
蜉蝣之翼❉10 小时前
CRT 不同会导致 fopen 地址不同
c++·mfc