EX_25/2/24

打印 上一主题 下一主题

主题 839|帖子 839|积分 2517

写一个三角形类,拥有私有成员 a,b,c 三条边 写好构造函数初始化 abc 以及 abc 的set get 接口 再写一个等腰三角形类,继承自三角形类 1:写好构造函数,初始化三条边 2:要求无论怎样,等腰三角形类对象,总是等腰的 再写一个等边三角形类,继承自等腰三角形类 1:写好构造函数,初始化三条边 2:要求无论怎样,等腰三角形类对象,总是等边
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdlib>
  4. #include <unistd.h>
  5. #include <sstream>
  6. #include <vector>
  7. #include <memory>
  8. using namespace std;                 
  9. class ABC
  10. {
  11. private:
  12.         int a;
  13.         int b;
  14.         int c;
  15. public:
  16.         ABC(int a=0,int b=0,int c=0)
  17.                 :a(a),b(b),c(c)
  18.         {}
  19.         void seta(int l)
  20.         {
  21.                 a=l;
  22.         }
  23.         void setb(int l)
  24.         {
  25.                 b=l;
  26.         }
  27.         void setc(int l)
  28.         {
  29.                 c=l;
  30.         }
  31.         int geta()
  32.         {
  33.                 return a;
  34.         }
  35.         int getb()
  36.         {
  37.                 return b;
  38.         }
  39.         int getc()
  40.         {
  41.                 return c;
  42.         }
  43. };
  44. class ABB:public ABC
  45. {
  46. public:
  47.         ABB(int a=0,int bb=0)
  48.                 :ABC(a,bb,bb)
  49.         {}
  50.         void seta(int a)
  51.         {
  52.                 ABC::seta(a);
  53.                 ABC::setb(a);
  54.         }
  55.         void setb(int b)
  56.         {
  57.                 ABC::seta(b);
  58.                 ABC::setb(b);
  59.         }
  60. };
  61. class AAA:public ABC
  62. {
  63.         AAA(int aaa=0)
  64.                 :ABC(aaa,aaa,aaa)
  65.         {}
  66.         void seta(int a)
  67.         {
  68.                 ABC::seta(a);
  69.                 ABC::setb(a);
  70.                 ABC::setc(a);
  71.         }
  72. };
  73. int main(int argc,const char** argv)
  74. {
  75.         ABB d;
  76.         d.seta(4);
  77.         d.setb(5);
  78.         d.setc(6);
  79.         AAA e;
  80.         e.seta(7);
  81.         return 0;
  82. }
复制代码
编写一个长方形类, 私有成员 a,b 构造函数初始化 set get 接口 编写一个正方形类,继承自长方形类 构造函数初始化 无论怎样,正方形类对象总是正方形的
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdlib>
  4. #include <unistd.h>
  5. #include <sstream>
  6. #include <vector>
  7. #include <memory>
  8. using namespace std;                 
  9. class AABB{
  10. private:
  11.     int a;
  12.     int b;
  13. public:
  14.     AABB(int a=0,int b=0):a(a),b(b){};
  15.     void setA(int l){a = l;}
  16.     void setB(int l){b = l;}
  17.     int getA(){return a;}
  18.     int getB(){return b;}
  19. };
  20. class AA:public AABB{
  21. public:
  22.     AA() : AABB(0,0){}
  23.     AA(int a)
  24.         :AABB(a,a)
  25.     {}
  26.     void setA(int a){
  27.         AABB::setA(a);
  28.         AABB::setB(a);
  29.     }
  30.     void setB(int b){
  31.         AABB::setA(b);
  32.         AABB::setB(b);
  33.     }
  34. };
  35. int main(int argc,const char** argv){
  36.     AA a1;
  37.     a1.setA(3);
  38.     a1.setB(4);
  39. }
复制代码
封装消息队列 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 中
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdlib>
  4. #include <unistd.h>
  5. #include <sstream>
  6. #include <vector>
  7. #include <memory>
  8. #include <sys/ipc.h>
  9. #include <sys/msg.h>
  10. using namespace std;
  11. class Msg {
  12. private:
  13.     key_t key;
  14.     int id;
  15.     int channel;
  16.     struct msgbuf {
  17.         long channel;
  18.         char text[512];
  19.     };
  20. public:
  21.     Msg(const string& filename = "") {
  22.         key = ftok(filename.data(), 1);
  23.         id = msgget(key, IPC_CREAT | 0666);
  24.     }
  25.     ~Msg() {
  26.         msgctl(id, IPC_RMID, 0);
  27.     }
  28.     void send(const string& str) {
  29.         msgbuf buf = {0};
  30.         strcpy(buf.text, str.data());
  31.         buf.channel = channel;
  32.         msgsnd(id, &buf, strlen(buf.text) + 1, 0);
  33.     }
  34.     string recv(int size = 512) {
  35.         msgbuf buf = {0};
  36.         msgrcv(id, &buf, size, channel, 0);
  37.         string str = buf.text;
  38.         return str;
  39.     }
  40.     friend Msg& operator<<(Msg& msg, const string& str);
  41.     friend Msg& operator>>(Msg& msg, string& str);
  42.     Msg& operator[](int channel) {
  43.         this->channel = channel;
  44.         return *this;
  45.     }
  46. };
  47. Msg& operator<<(Msg& msg, const string& str) {
  48.     msg.send(str);
  49.     return msg;
  50. }
  51. Msg& operator>>(Msg& msg, string& str) {
  52.     str = msg.recv();
  53.     return msg;
  54. }
  55. int main(int argc, const char** argv) {
  56.     return 0;
  57. }
复制代码
封装信号灯集 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-- 功能, 即上锁一次
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdlib>
  4. #include <unistd.h>
  5. #include <sstream>
  6. #include <vector>
  7. #include <memory>
  8. #include <sys/ipc.h>
  9. #include <sys/sem.h>
  10. using namespace std;
  11. class Sem {
  12. private:
  13.     key_t key;
  14.     int id;
  15.     int index;
  16. public:
  17.     Sem(const string& filename = "", int n, int val) {
  18.         key = ftok(filename.data(), 1);
  19.         id = semget(key, n, IPC_CREAT | 0666);
  20.         for (int i = 0; i < n; i++) {
  21.             semctl(id, i, SETVAL, val);
  22.         }
  23.     }
  24.     ~Sem() {
  25.         semctl(id, 0, IPC_RMID);
  26.     }
  27.     friend Sem& operator+(const Sem& l, int val);
  28.     friend Sem& operator-(const Sem& l, int val);
  29.     friend Sem& operator++(Sem& l);
  30.     friend Sem& operator--(Sem& l);
  31.     friend Sem& operator[](Sem& l, int index);
  32. };
  33. Sem& operator+(Sem& l, int val) {
  34.     sembuf buf = {0};
  35.     buf.sem_num = l.index;
  36.     buf.sem_op = abs(val);
  37.     buf.sem_flg = SEM_UNDO;
  38.     semop(l.id, &buf, 1);
  39.     return l;
  40. }
  41. Sem& operator-(Sem& l, int val) {
  42.     sembuf buf = {0};
  43.     buf.sem_num = l.index;
  44.     buf.sem_op = -abs(val);
  45.     buf.sem_flg = SEM_UNDO;
  46.     semop(l.id, &buf, 1);
  47.     return l;
  48. }
  49. Sem& operator++(Sem& l) {
  50.     sembuf buf = {0};
  51.     buf.sem_num = l.index;
  52.     buf.sem_op = 1;
  53.     buf.sem_flg = SEM_UNDO;
  54.     semop(l.id, &buf, 1);
  55.     return l;
  56. }
  57. Sem& operator--(Sem& l) {
  58.     sembuf buf = {0};
  59.     buf.sem_num = l.index;
  60.     buf.sem_op = -1;
  61.     buf.sem_flg = SEM_UNDO;
  62.     semop(l.id, &buf, 1);
  63.     return l;
  64. }
  65. Sem& operator[](const Sem& l,int index){
  66.         l.index = index;
  67.         return l;
  68. }
  69. int main(int argc, const char** argv) {
  70.    
  71.     return 0;
  72. }
复制代码


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

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小小小幸运

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表