我正在尝试删除此程序中继承的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 []属性”并且它有效......
答案 0 :(得分:6)
由于它是A的私有,因此A应该是负责删除它的类。
你不应该在B中删除它,这违反了基本的封装。 B应该只关注删除自己的属性。
答案 1 :(得分:0)
您在A类中的属性被定义为私有,因此它不会被B类继承。它在B类中不存在。这就是您无法删除它的原因。
尝试使用protected。
答案 2 :(得分:0)
您无法从派生类访问基类的私有变量。如果您希望从派生类访问它,则需要使其受到保护。