访问私人会员的私人会员

时间:2016-11-19 19:51:19

标签: c++ inheritance arraylist heap

我正在尝试使用我的类DynamicArrayList来实现类Heap。在我的头文件中,Heap包含我的DynamicArrayList标头,并且DynamicArrayList作为私有成员。在实现我的Heap时,我想使用数组“data”,它也是我DynamicArrayList中的私有成员,但是它给了我错误:

  

DynamicArrayList :: data无法访问声明的私有成员   class DynamicArrayList

当我尝试更改堆文件中的数组时。例如,我会尝试

lst.data[0] = lst.data[heapSize]

lstDynamicArrayList被定义为Heap文件中的私有成员,我会得到错误。我应该将成员从private更改为protected还是我还能做些什么才能访问该阵列?

1 个答案:

答案 0 :(得分:0)

您应该使DynamicArrayList成为同类型其他对象的朋友。 这样,您就可以在类中定义的方法中访问私有数据。 朋友应该被轻易使用,因为它破坏了封装。

以下是如何使用朋友的链接:https://www.tutorialspoint.com/cplusplus/cpp_friend_functions.html

这是使用模板的另一个例子,因为我假设你将使用它们 根据您定义的类,为您的项目。 例如:

template<typename eltType>
class Data {
public:
// add new content
void add(const eltType& _data){
    myStuff.push_back(_data);
}

// append data
void append(const Data<eltType>& _data){
    vector<eltType>::const_iterator it = _data.myStuff.begin();

    for (; it !=  _data.myStuff.end(); it++){
        this->myStuff.push_back(*it);
    }
}

// print data
void print(void){
    vector<eltType>::iterator it = this->myStuff.begin();

    for (;it != this->myStuff.end(); it++){
        printf((*it + "\n").c_str()); 
    }
}

// my friend
friend Data<eltType>;
private:
vector<eltType> myStuff;
};

希望这有帮助!