写一个三角形类,拥有私有成员 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;
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |