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.cpp
#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.cpp
#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;
}