继承和动态内存分配(C++ Primer Plus 第十三章)

来源:互联网 发布:淘宝女装销量 编辑:程序博客网 时间:2024/04/30 18:56

第一种情况:派生类中不使用new

class baseDMA{private:    char *label;    int rating;    public:    baseDMA(const char *l = nullptr, int r =0);    baseDMA( const baseDMA &rs);        virtual ~baseDMA();        baseDMA & operator=( const  baseDMA &rs);    };

class lacksDMA : public baseDMA {private:    char color[40];//原书这里有错误,我猜测应该是  long temp; 定义一个长整形。    public:};
派生类lacksDMA不使用new。

派生类直接使用基类的析构函数没有问题。  

难点在于理解重载复制构造函数。  如果是long参数的话,那lacksDMA复制的话,temp变量采用常规赋值即可,继承的baseDMA对象则采用基类的复制构造函数。

第二种情况:派生类使用了new

class lacksDMA : public baseDMA {private:    char *style;    public:};
这种情况下,派生类必须定义显示析构函数,复制构造函数和赋值运算符。
如下:
hasDMA::hasDMA(const hasDMA & hs) : baseDMA(hs){    style = new char[ std::strlen(hs.style)+1];    std::strcpy(style, hs.style);}hasDMA & hasDMA::operator=(const hasDMA & hs){    if (this == &hs) {        return *this;    }        baseDMA::operator=(hs); //赋值基类对象  也是采用动态分配内存  显示调用    delete []style;    style = new char[ std::strlen(hs.style)+1];    std::strcpy(style, hs.style);    return *this;}hasDMA::~hasDMA(){    delete [] style;}


0 0
原创粉丝点击