1.
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>using namespace std; class AB{
private:int a;int b;
public:AB(int a=0,int b=0){}void seta(int l){a=l;}void setb(int l){b=l;}int geta(){return a;}int getb(){return b;}
};class AA:public AB{public:AA(int ab=0,int bc=0):AB(ab,bc){}void setA(int a){seta(a);setb(a);}void setB(int a){seta(a);setb(a);}void show(){if(geta()==getb()){cout<<"是正方形"<<endl;}else{cout<<"是长方形"<<endl;}}
};int main(int argc,const char** argv){AA aa;aa.setA(4);aa.setB(5);aa.show();return 0;
}
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){}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 AAB:public ABC{public:AAB(int ab=0,int bc=0,int cd=0):ABC(ab,bc,cd){}void setA(int a){seta(a);setb(a);}void setB(int a){seta(a);setb(a);}void setC(int a){seta(a);setb(a);}};class AAA:public AAB{public:AAA(int ab=0,int bc=0,int cd=0):AAB(ab,bc,cd){}void setA(int a){seta(a);setb(a);setc(a);}void setB(int a){seta(a);setb(a);setc(a);}void setC(int a){seta(a);setb(a);setc(a);}void show(){cout<<geta()<<endl<<getb()<<endl<<getc()<<endl;if(geta()==getb()&&geta()==getc()){cout<<"是等边三角形"<<endl;}else{cout<<"不是等边三角形"<<endl;}}
};int main(int argc,const char** argv){AAA aaa;aaa.AAA::setA(3);aaa.AAA::setB(4);aaa.AAA::setC(5);aaa.AAA::show();return 0;
}
3.queue
#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; struct MessageBuf {long mtype; char mtext[128];
};class Msg{
private:long channel;MessageBuf buf;key_t key;int id;
public:Msg(const char* filename);Msg& operator[](int c);
// void send(const char* txt);friend void operator<<(Msg& buf,const char* txt);
};Msg::Msg(const char* filename)
{key=ftok(filename,1);id=msgget(key,IPC_CREAT|0666);memset(&buf,0,128);
}Msg& Msg::operator[](int c)
{channel=c; return *this;
}void operator<<( Msg& m,const char* txt)
{m.buf.mtype=m.channel;strcpy(m.buf.mtext,txt);msgsnd(m.id,&m.buf,sizeof(m.buf.mtext),IPC_NOWAIT);
}int main(int argc,const char** argv){while(1)
{Msg m("ipc");long channel;cout<<"请选择频道号: ";cin>>channel;m[channel]<<"hello world";
}return 0;
}
queue.read
#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; struct MessageBuf {long mtype; char mtext[128];
};class Msg{
private:long channel;MessageBuf buf;key_t key;int id;
public:Msg(const char* filename);Msg& operator[](int c);friend Msg& operator>>(Msg& m,string& s);
};Msg::Msg(const char* filename)
{key=ftok(filename,1);id=msgget(key,IPC_CREAT|0666);memset(&buf,0,128);
}Msg& Msg::operator[](int c)
{channel=c; return *this;
}Msg& operator>>(Msg& m,string& s)
{m.buf.mtype=m.channel;msgrcv(m.id,&m.buf,sizeof(m.buf.mtext),m.channel,IPC_NOWAIT);s=m.buf.mtext;return m;
}int main(int argc,const char** argv){
while(1)
{Msg m("ipc");long channel;cout<<"请选择频道号: ";cin>>channel;string str;m[channel]>>str;cout<<str<<endl;
}}
4.
lude <sys/ipc.h>
#include <semaphore.h>
#include <sys/sem.h>using namespace std;class Sem{
private:key_t key;int id;int index;
public:Sem(const char* filename,int n,int val){key = ftok(filename,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+(Sem& l,int val);friend Sem& operator-(Sem& l,int val);Sem& operator[](int index);Sem& operator++(int);Sem& operator--(int);
};// Sem s
// s + 1解锁
// s - 1 上锁
// s + 1 + 1 + 1 - 2 - 3
// int(4) + 3
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& Sem::operator++(int)
{sembuf buf = {0};buf.sem_num =this->index;buf.sem_op = 1;buf.sem_flg = SEM_UNDO;semop(this->id,&buf,1);return *this;
}/*Sem s;s[0] - 1 s.index = 0确定好了
*/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& Sem::operator--(int)
{sembuf buf = {0};buf.sem_num = this->index;buf.sem_op = -1;buf.sem_flg = SEM_UNDO;semop(this->id,&buf,1); return *this;
}Sem& Sem::operator[](int index){this->index = index;return *this;
}