#ifndef DMAABC_H_#define DMAABC_H_#include class DMAABC{private: char * label; int rating;protected: char * LABEL() const{ return label; } int RATING() const{ return rating; }public: DMAABC(const char * l = "null", int r = 0); DMAABC(const DMAABC & dm); virtual ~DMAABC(); DMAABC & operator=(const DMAABC & dm); virtual void View() const = 0;};class baseDMA :public DMAABC{public: baseDMA(const char * l = "null", int r = 0); baseDMA(const baseDMA & rs); virtual ~baseDMA(); baseDMA & operator=(const baseDMA & rs); virtual void View() const;};class lacksDMA :public DMAABC{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 DMAABC & dm); lacksDMA(const lacksDMA & la); lacksDMA & operator=(const lacksDMA & la); virtual void View() const;};class hasDMA :public DMAABC{private: char * style;public: hasDMA(const char * s = "none", const char * l = "null", int r = 0); hasDMA(const char * s, const DMAABC & dm); hasDMA(const hasDMA & hs); virtual~hasDMA(); hasDMA & operator=(const hasDMA & rs); virtual void View() const;};#endif#include "DMAABC.h"using std::cout;using std::endl;DMAABC::DMAABC(const char * l, int r){ label = new char[strlen(l) + 1]; strcpy_s(label, strlen(l) + 1, l); rating = r;}DMAABC::DMAABC(const DMAABC & dm){ label = new char[strlen(dm.label) + 1]; strcpy_s(label, strlen(dm.label) + 1, dm.label); rating = dm.rating;}DMAABC::~DMAABC(){ delete[]label;}DMAABC & DMAABC::operator=(const DMAABC & dm){ if (this == &dm) return *this; delete[]label; label = new char[strlen(dm.label) + 1]; strcpy_s(label, strlen(dm.label) + 1, dm.label); rating = dm.rating; return *this;}void DMAABC::View() const{ cout |