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

编写程序测试

相关推荐
Elias不吃糖1 天前
Java Lambda 表达式
java·开发语言·学习
guygg881 天前
一级倒立摆MATLAB仿真程序
开发语言·matlab
暮色_年华1 天前
随想 2:对比 linux内核侵入式链表和 STL 非侵入链表
linux·c++·链表
情缘晓梦.1 天前
C语言指针进阶
java·开发语言·算法
世转神风-1 天前
qt-字符串版本与数值版本互转
开发语言·qt
极客代码1 天前
深入解析C语言中的函数指针:原理、规则与实践
c语言·开发语言·指针·状态机·函数·函数指针
w-w0w-w1 天前
C++模板参数与特化全解析
开发语言·c++
不绝1911 天前
C#核心:继承
开发语言·c#
大锦终1 天前
递归回溯综合练习
c++·算法·深度优先