写一个三角形类,拥有私有成员 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;
}