如何删除继承的私有char *属性? (例如:在析构函数中)

时间:2013-01-03 07:22:57

标签: c++ inheritance attributes char

我正在尝试删除此程序中继承的char*属性:

在A.h

class A {    
  public :
    // Functions, constructors and such
  private :
    char* attribute;
}

在B.h

#include "A.h"

class B : public A {
  public :
    B(const char* _attribute, int s) : A(_attribute) {setSpeed(s);}
    ~B()
  private :
    int speed;
}

在析构函数中使用delete [],如下所示:

B::~B() {
  delete [] attribute;
}

但我得到这个错误:`char * A :: attribute'是私有的

在A的destuctor(~A())中,我使用相同的“destroy []属性”并且它有效......

3 个答案:

答案 0 :(得分:6)

由于它是A的私有,因此A应该是负责删除它的类。

你不应该在B中删除它,这违反了基本的封装。 B应该只关注删除自己的属性。

答案 1 :(得分:0)

您在A类中的属性被定义为私有,因此它不会被B类继承。它在B类中不存在。这就是您无法删除它的原因。

尝试使用protected。

答案 2 :(得分:0)

您无法从派生类访问基类的私有变量。如果您希望从派生类访问它,则需要使其受到保护。