#ifndef DMA_H_
#define DMA_H_
#include <iostream>
class DMA
{
private:
char *label;
int rating;
protected:
void setlab(const char *c);
void dellab();
void setrat(const int n);
char *getlab()const{return label;}
int getrat()const{return rating;}
public:
DMA(const char *l="null",int r=0);
DMA(const DMA &rs);
// DMA(){label=NULL;rating=0;}//warning C4520: 'DMA' : multiple default constructors specified,默认构造函数有两个,当DMA d时,这两个构造函数可以不带参数调用(即两者都是默认的构造函数)。
virtual ~DMA();
virtual DMA &operator=(const DMA &rs);
friend std::ostream &operator<<(std::ostream &os,const DMA &rs);
virtual void View();
};
class baseDMA:public DMA
{
public:
baseDMA(const char *l="null",int r=0);
baseDMA(const baseDMA &rs);
// virtual ~baseDMA();
baseDMA &operator=(const baseDMA &rs);
virtual void View();
friend std::ostream &operator<<(std::ostream &os,const baseDMA &rs);
};
class lacksDMA:public DMA
{
private:
enum{COL_LEN=40};
char color[COL_LEN];
public:
lacksDMA(const char *c="blank",const char *l="null",int r=0);
lacksDMA(const char *c,const DMA &rs);
virtual void View();
friend std::ostream &operator<<(std::ostream &os,const lacksDMA &rs);
};
class hasDMA:public DMA
{
private:
char *style;
protected:
char *getsty()const{return style;}
void setsty(const char *c);
void delsty();
public:
hasDMA(const char *s="null",const char *l="null",int r=0);
hasDMA(const char *s,const DMA &rs);
hasDMA(const hasDMA &hs);
~hasDMA();
hasDMA &operator=(const hasDMA &rs);
virtual void View();
friend std::ostream & operator<<(std::ostream &os,const hasDMA &rs);
};
#endif
#include <iostream>
#include "dma.h"
using namespace std;
void DMA::setlab(const char *c)
{
label=new char[strlen(c)+1];
strcpy(label,c);
}
void DMA::dellab()
{
delete [] label;
label=NULL;
}
void DMA::setrat(const int n)
{
rating=n;
}
DMA::DMA(const char *l,int r)
{
setlab(l);
setrat(r);
}
DMA::DMA(const DMA &rs)
{
setlab(rs.getlab());
setrat(rs.getrat());
}
DMA::~DMA()
{
delete [] label;
label=NULL;
}
DMA &DMA::operator=(const DMA &rs)
{
dellab();
setlab(rs.getlab());
setrat(rs.getrat());
return *this;
}
void DMA::View()
{
cout<<"label="<<label<<endl;
cout<<"rating="<<rating<<endl;
}
ostream &operator<<(ostream &os,const DMA &rs)
{
os<<"label="<<rs.label<<endl;
os<<"rating="<<rs.rating<<endl;
return os;
}
//void DMA::View();
baseDMA::baseDMA(const char *l,int r):DMA(l,r){}
baseDMA::baseDMA(const baseDMA &rs):DMA(rs.getlab(),rs.getrat()){}
// virtual ~baseDMA();
baseDMA & baseDMA::operator=(const baseDMA &rs)
{
dellab();
setlab(rs.getlab());
setrat(rs.getrat());
return *this;
}
void baseDMA::View()
{
cout<<"baseDMA label="<<getlab()<<endl;
cout<<"baseDMA rating="<<getrat()<<endl;
}
ostream &operator<<(ostream &os,const baseDMA &rs)
{
os<<"baseDMA label="<<rs.getlab()<<endl;
os<<"baseDMA rating="<<rs.getrat()<<endl;
return os;
}
lacksDMA::lacksDMA(const char *c,const char *l,int r):DMA(l,r)
{
strcpy(color,c);
}
lacksDMA::lacksDMA(const char *c,const DMA &rs):DMA(rs)
{
strcpy(color,c);
}
void lacksDMA::View()
{
cout<<"lacksDMA color="<<color<<endl;
cout<<"lacksDMA label="<<getlab()<<endl;
cout<<"lacksDMA rating="<<getrat()<<endl;
}
ostream &operator<<(ostream &os,const lacksDMA &rs)
{
os<<"lacksDMA color="<<rs.color<<endl;
os<<"lacksDMA label="<<rs.getlab()<<endl;
os<<"lacksDMA rating="<<rs.getrat()<<endl;
return os;
}
void hasDMA::setsty(const char *c)
{
style=new char[strlen(c)+1];
strcpy(style,c);
}
void hasDMA::delsty()
{
delete [] style;
style=NULL;
}
hasDMA::hasDMA(const char *s,const char *l,int r):DMA(l,r)
{
setsty(s);
}
hasDMA::hasDMA(const char *s,const DMA &rs):DMA(rs)
{
setsty(s);
}
hasDMA::hasDMA(const hasDMA &hs)
{
setsty(hs.getsty());
setlab(hs.getlab());
setrat(hs.getrat());
}
hasDMA::~hasDMA()
{
delsty();
}
hasDMA & hasDMA::operator=(const hasDMA &rs)
{
delsty();
dellab();
setsty(rs.getsty());
setlab(rs.getlab());
setrat(rs.getrat());
return *this;
}
void hasDMA::View()
{
cout<<"hasDMA style="<<getsty()<<endl;
cout<<"hasDMA label="<<getlab()<<endl;
cout<<"hasDMA rating="<<getrat()<<endl;
}
ostream & operator<<(ostream &os,const hasDMA &rs)
{
os<<"hasDMA style="<<rs.getsty()<<endl;
os<<"hasDMA label="<<rs.getlab()<<endl;
os<<"hasDMA rating="<<rs.getrat()<<endl;
return os;
}
#include <iostream>
#include "dma.h"
using namespace std;
int main()
{
DMA *d[5];
d[0]=new DMA("Portabelly",8);
d[1]=new baseDMA("Blimpo33",33);
d[2]=new lacksDMA("red","Blimpo",4);
d[3]=new hasDMA("Mercator","Buffalo",5);
d[0]->View();
d[1]->View();
d[2]->View();
d[3]->View();
d[4]=d[0];
d[4]->View();
// cout<<*d[0]<<endl;
// cout<<(baseDMA)*d[1]<<endl;
// cout<<(lacksDMA)*d[2]<<endl;
// cout<<(hasDMA)*d[3]<<endl;
return 0;
}