Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何删除继承的私有char*属性?(例如:在析构函数中)_C++_Inheritance_Attributes_Char - Fatal编程技术网

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