小小小幸运 发表于 3 天前

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.send("数据"),将数据发送到1号频道中 string str = m.recv(int size) 从1号频道中读取消息,而且返回 把 send 改成 operator<< ,recv 改成 operator>> 实现效果: m << "helloworld" 将 "helloworld" 写入消息队列的1号频道中 m >> 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;
    };

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.init(10):手动初始化信号灯会合的第1个信号量,初始化成 10 s + 1 让信号灯会合的第1个信号量的值 +1 s.operator+(1) s - 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;
}

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: EX_25/2/24