簡體   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