当前位置: 首页 > article >正文

EX_25/2/24

写一个三角形类,拥有私有成员 a,b,c 三条边 写好构造函数初始化 abc 以及 abc 的set get 接口 再写一个等腰三角形类,继承自三角形类 1:写好构造函数,初始化三条边 2:要求无论如何,等腰三角形类对象,总是等腰的 再写一个等边三角形类,继承自等腰三角形类 1:写好构造函数,初始化三条边 2:要求无论如何,等腰三角形类对象,总是等边

#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 ABB:public ABC
{
public:
	ABB(int a=0,int bb=0)
		:ABC(a,bb,bb)
	{}
	void seta(int a)
	{
		ABC::seta(a);
		ABC::setb(a);
	}
	void setb(int b)
	{
		ABC::seta(b);
		ABC::setb(b);
	}
};
class AAA:public ABC
{
	AAA(int aaa=0)
		:ABC(aaa,aaa,aaa)
	{}
	void seta(int a)
	{
		ABC::seta(a);
		ABC::setb(a);
		ABC::setc(a);
	}
};
int main(int argc,const char** argv)
{
	ABB d;
	d.seta(4);
	d.setb(5);
	d.setc(6);

	AAA e;
	e.seta(7);
	return 0;
}

编写一个长方形类, 私有成员 a,b 构造函数初始化 set get 接口 编写一个正方形类,继承自长方形类 构造函数初始化 无论如何,正方形类对象总是正方形的

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

using namespace std;                 

class AABB{
private:
    int a;
    int b;
public:
    AABB(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 AA:public AABB{
public:
    AA() : AABB(0,0){}

    AA(int a)
        :AABB(a,a)
    {}

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

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


int main(int argc,const char** argv){
    AA a1;
    a1.setA(3);
    a1.setB(4);

}

封装消息队列 class Msg{ key_t key int id; int channel } 实现以下功能 Msg m("文件名") m[1].send("数据"),将数据发送到1号频道中 string str = m[1].recv(int size) 从1号频道中读取消息,并且返回 把 send 改成 operator<< ,recv 改成 operator>> 实现效果: m[1] << "helloworld" 将 "helloworld" 写入消息队列的1号频道中 m[1] >> str 读取消息队列中1频道中的消息,存入 str 中

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>
#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, strlen(buf.text) + 1, 0);
    }

    string recv(int size = 512) {
        msgbuf buf = {0};
        msgrcv(id, &buf, size, channel, 0);
        string str = buf.text;
        return str;
    }

    friend Msg& operator<<(Msg& msg, const string& str);
    friend Msg& operator>>(Msg& msg, string& str);

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

Msg& operator<<(Msg& msg, const string& str) {
    msg.send(str);
    return msg;
}

Msg& operator>>(Msg& msg, string& str) {
    str = msg.recv();
    return msg;
}

int main(int argc, const char** argv) {

    return 0;
}

封装信号灯集 class Sem{ key_t key int id; int index } 实现以下功能 Sem s(参数x,参数y):创建信号灯集,信号灯集中存在 x 个信号量,并且将所有信号量初始化为 y s[1].init(10):手动初始化信号灯集中的第1个信号量,初始化成 10 s[1] + 1 让信号灯集中的第1个信号量的值 +1 s[1].operator+(1) s[1] - 1 让信号灯集中的第1个信号量的值 -1 追加 operator ++ 功能,即解锁一次 以及 operator-- 功能, 即上锁一次

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

using namespace std;

class Sem {
private:
    key_t key;
    int id;
    int index;

public:
    Sem(const string& filename = "", int n, int val) {
        key = ftok(filename.data(), 1);
        id = semget(key, n, IPC_CREAT | 0666);
        for (int i = 0; i < n; i++) {
            semctl(id, i, SETVAL, val);
        }
    }

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

    friend Sem& operator+(const Sem& l, int val);
    friend Sem& operator-(const Sem& l, int val);
    friend Sem& operator++(Sem& l);
    friend Sem& operator--(Sem& l);
    friend Sem& operator[](Sem& l, int index);
};

Sem& operator+(Sem& l, int val) {
    sembuf buf = {0};
    buf.sem_num = l.index;
    buf.sem_op = abs(val);
    buf.sem_flg = SEM_UNDO;
    semop(l.id, &buf, 1);
    return l;
}

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

Sem& operator++(Sem& l) {
    sembuf buf = {0};
    buf.sem_num = l.index;
    buf.sem_op = 1;
    buf.sem_flg = SEM_UNDO;
    semop(l.id, &buf, 1);
    return l;
}

Sem& operator--(Sem& l) {
    sembuf buf = {0};
    buf.sem_num = l.index;
    buf.sem_op = -1;
    buf.sem_flg = SEM_UNDO;
    semop(l.id, &buf, 1);
    return l;
}
Sem& operator[](const Sem& l,int index){
	l.index = index;
	return l;
}
int main(int argc, const char** argv) {
   
    return 0;
}


http://www.kler.cn/a/561136.html

相关文章:

  • 服务器独立IP对于网站的作用
  • Windows - 通过ssh打开带有图形界面的程序 - 一种通过计划任务的曲折实现方式
  • 机试题——新能源汽车充电桩建设策略
  • Spring MVC的基本概念
  • java练习(38)
  • Win32/ C++ 简易对话框封装框架(多语言, 通知栏菜单, 拖拽文件处理)
  • git 小乌龟安装包及中文包
  • touchgfx的工作机制
  • DeepSeek开源周Day1:重磅发布FlashMLA,重新定义AI推理效率天花板
  • 今日运维之-Mac笔记本python环境问题
  • Postman参数介绍
  • Docker核心概念
  • 小迪安全-24天-文件管理,显示上传,黑白名单,访问控制
  • 大语言模型基础
  • 分布式文件系统HDFS
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_cpuinfo 函数
  • Terser 与 Esbuild 比较
  • 如何在本地和服务器新建Redis用户和密码
  • 大数据开发平台的框架
  • 【python】提取word\pdf格式内容到txt文件