繁体   English   中英

访问私人成员的私人成员

[英]Accessing private members of a private member

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

DynamicArrayList :: data无法访问在DynamicArrayList类中声明的私有成员

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

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

lst作为DynamicArrayList定义为堆文件中的私有成员,我会得到错误。 我应该将成员从private更改为protected还是可以执行其他操作来访问阵列?

您应该使DynamicArrayList成为其他相同类型对象的朋友。 这样,您可以通过类中定义的方法访问私有数据。 Friend应该轻拿轻放,因为它会破坏封装。

这是使用朋友的链接: 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;
};

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM