2014-12-03 6 views
-2

개인 및 공용 멤버가있는 클래스 개인 단어 멤버에 액세스하기 위해 getter()를 사용하려고합니다. 이 모든 컴파일하지만 값이 dir[NORTH].Get_Words() = "NORTH"; 일 때 단어가 Get_Words() 멤버 함수가없는 공용 함수 일 때마다 dir[NORTh].word = "NORTH"; 값이 단어에 올바르게 할당되지 않는 이유는 무엇입니까?C++ getter로 개인적인 가치 얻기

class Words 
{ 
    public: 
    static void Set_Words(); 
    string Get_Words(); 
    private: 
    string word; 
} 

string Word::Get_Words() 
{ 
    return word; 
} 

... 
dir[NORTH].Get_Word() = "NORTH"; 

와 나는 또한

dir[NORTH].Get_Word() = Set_Word(string "North"); 

내가 세터 잘못된 내가 한 확신하지만 C++에서 객체 지향 프로그래밍에 새로운 오전이 작업을 수행하는 가장 좋은 방법을 알아낼 수 없습니다 시도 .

+0

... getter 메소드 만 얻을 수있는 더 좋은 방법은 측면을 따라 세터에게 게터를 제공하는 것입니다 not set –

+0

미안하지만 나는 setter 메소드를 시도했지만 올바르게 구현할 수 없다고 덧붙였다. 나도 노력 setter 코드로 업데이 트됩니다. – mikeLspohn

+0

나는 당신이'Get_Words'라고 선언했지만'Get_Word'라고 불렀습니다 ... 단어 나 단어가되기를 원합니까? 여러 단어를 관리하기 위해 배열을 사용하여 단어를 조사해야하는 경우 –

답변

2

std::string Get_Word() 값으로 반환, 일명 단어 복사본을 만들어서 반환합니다. 할당하려고하면 불가능한 오른쪽 참조를 지정하려고합니다. 이 단어에 대한 참조를 반환하는 것 주위

하는 방법입니다 :

std::string& Get_Word(); 

하지만 클래스를 오래 살 수있는 참고로이 일반적으로 생각된다 나쁜 관행. 더 나은조차

void Set_Word(const std::string& w) {word=w;} 

나 : 당신은뿐만 아니라 공공 setter 메소드를 만들 필요가 있기 때문에

template <typename T> 
void Set_Word(T&& w) {word=std::foreward<T>(w);} 
+0

설명해 주셔서 감사합니다. – mikeLspohn

0

개인 값을 얻으려면 대개 public get 함수가 구현됩니다.

void Set_Word(string& newValue) { ... } 

또는 언급 모스크바에서 블라드 등의 참조를 반환으로 게터를 구현 : 일반적으로 공개 설정 기능이 작업을 위해 구현 -

당신은 값을 설정합니다.