1

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

在啊

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

在 Bh

#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 的析构函数 ( ~A()) 中,我使用相同的“destroy [] 属性”并且它可以工作......

4

3 回答 3

5

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

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

于 2013-01-03T07:29:30.383 回答
0

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

尝试使用受保护的。

于 2013-01-03T07:29:16.120 回答
0

您不能从派生类访问基类的私有变量。如果您希望从派生类访问它,则需要对其进行保护。

于 2013-01-03T07:31:35.330 回答