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

派生クラスから基底クラスのプライベート変数にアクセスすることはできません。派生クラスからアクセスできるようにする場合は、保護する必要があります。

于 2013-01-03T07:31:35.330 に答える
0

クラス A の属性はプライベートとして定義されているため、クラス B には継承されません。クラス B には存在しません。そのため、削除できません。

保護されたものを使用してみてください。

于 2013-01-03T07:29:16.120 に答える