2016-11-19 3 views
0

내 클래스 DynamicArrayList을 사용하여 클래스 힙을 구현하려고합니다. 내 헤더 파일에서 힙에는 내 DynamicArrayList 헤더가 포함되어 있으며 DynamicArrayList은 개인 회원으로 있습니다. DynamicArrayList :: 데이터가 클래스 DynamicArrayList에서 선언 private 멤버에 액세스 할 수 없습니다개인 멤버의 비공개 멤버에 액세스

: 내 힙을 구현에서 나는 그러나 그것은 저에게 오류를 제공, 또한 내 DynamicArrayList에서 개인 구성원 배열 "데이터"를 사용하려면

힙 파일에서 배열을 변경하려고 할 때. 예를 들어 나는 lst

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

DynamicArrayList가 힙 파일에 개인 회원으로 정의되는 노력할 것이라고 나는 오류를 얻을 것입니다. 회원 번호를 private에서 protected으로 변경해야합니까? 배열에 액세스하려면 어떻게해야합니까?

+0

'public'으로 설정하지 않으면이 경우 사용할 수 없습니다. – skypjack

+1

'DynamicArrayList'는 기본 클래스가 아닌 멤버이므로'data'가'private'인지'protected'인지는 중요하지 않습니다. 'DynamicArrayList'에'data' (누구나 액세스 할 수 있도록 허용)의 접근 자 (getter)를 주거나'DynamicArrayList'가'Heap'을 친구로 선언하도록 할 수 있습니다 (클래스를 함께 연결하고'Heap'이 효과적으로 처리하도록합니다) 'DynamicArrayList'의 모든 멤버를 public으로 설정합니다. 이 경우 캡슐화를 깨뜨리지 않기 때문에 'friend'가 더 나을 것입니다 (https://isocpp.org/wiki/faq/friends#friends-and-encap). –

답변

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; 
}; 

희망이 있습니다.