C++ 如何删除继承的私有char*属性?(例如:在析构函数中)
我正在尝试删除此程序中继承的C++ 如何删除继承的私有char*属性?(例如:在析构函数中),c++,inheritance,attributes,char,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);}
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的destructor(
~A()
)中,我使用了相同的“destroy[]属性”,它可以工作…类A中的属性定义为private,因此它不是由类B继承的。它在类B中不存在。这就是为什么不能删除它
尝试使用protected。类A中的属性定义为private,因此它不会被类B继承。它在类B中不存在。这就是为什么不能删除它
尝试使用protected。因为它是A私有的,所以A应该是负责删除它的类
您不应该在B中删除它,这违反了基本封装。B应该只负责删除自己的属性。因为它是A的私有属性,所以A应该是负责删除它的类
您不应该在B中删除它,这违反了基本封装。B应该只注意删除自己的属性。您不能从派生类访问基类的私有变量。如果希望从派生类访问它,则需要对其进行保护。不能从派生类访问基类的私有变量。如果希望从派生类访问对象,则需要对其进行保护。因为我从B创建了具有继承自A的属性的对象,并且为了销毁它,我使用了B中的析构函数,因为B中还有其他属性。请参见
A(_属性)
将char*
传递给A?这应该告诉你们,谁的破坏者应该对破坏负责。我猜这不是一个私人的,只是没有特别的原因。这可能是有原因的。所以让~A()来处理它。一旦~B()完成,它就会被调用。因为我从B中创建了一个具有从A继承的属性的对象,并且为了销毁它,我使用了B中的析构函数,因为B中还有其他属性。看到A(_属性)
将char*
传递给A了吗?这应该告诉你们,谁的破坏者应该对破坏负责。我猜这不是一个私人的,只是没有特别的原因。这可能是有原因的。所以让~A()来处理它。一旦~B()完成,就会调用它。那么我应该如何从B调用A的析构函数呢?@user1944839,A的析构函数将在B
之后自动调用。无论如何,考虑使用<代码> STD::String ,而不是<代码> char */COD>。然后,没有人需要在它之后进行清理。@user1944839否。当类的析构函数完成执行时,它会自动调用基类的析构函数(如果涉及多重继承,则全部调用)。抱歉,我这么问是因为我有义务使用char*.Oooooh!这是有用的信息。非常感谢你帮助我的人!:当我应该如何从B调用A的析构函数时?@user1944839,A的析构函数将在B
之后自动调用。无论如何,考虑使用<代码> STD::String ,而不是<代码> char */COD>。然后,没有人需要在它之后进行清理。@user1944839否。当类的析构函数完成执行时,它会自动调用基类的析构函数(如果涉及多重继承,则全部调用)。抱歉,我这么问是因为我有义务使用char*.Oooooh!这是有用的信息。非常感谢你帮助我的人!:D