2012-07-06 5 views
0

생성자에서 다른 클래스 (사용이라고 함)에 전달할 구성 클래스가 있습니다. Use 클래스의 내부에서 구성 클래스를 전용 멤버 변수로 저장하려고합니다. 나는 그것이 const가되고 싶다.const 개체 전달 방법

class Configuration{ 
private: 
    int value1_; 
public: 
    Configuration(); 
    Configuration(int value1){value1_=value1;} 
    int value1() const { 
     return value1_; 
    } 
}; 

class Use{ 
private: 
    //const me 
    Configuration config_; 
    int something_; 
public: 
    Use(Configuration &config){ 
     config_=config; 
    } 

    void doSomething(){ 
     something_+=config_.value1(); 
    } 
}; 

내가 Use::config_을에서 const 싶지만 혼란 컴파일 에러의 끝을하려고 모든 방법 :

지금까지,이 코드가 있습니다. 어떻게해야합니까?

+0

어떤 컴파일러 오류? –

답변

2

이 기능을 지원하는 가장 좋은 방법은 기준에게 질문은에 조금 명확하게 할 필요가

class Use{ 
private: 
    const Configuration& config_; 
    int something_; 
public: 
    Use(const Configuration &config) : 
     config_(config), 
     something_(0) { 

    } 

    void doSomething(){ 
     something_+=config_.value1(); 
    } 
}; 

하나 개의 항목을 사용하는 것입니다 그러나, 그 initialiser 목록에서 직접 초기화 할 수 있습니다 ConfigurationUse 인스턴스 사이의 관계 Configuration이 모두 Use 인스턴스 사이에서 공유되도록 의도 된 경우 참조 (내가 설명한대로)가 가장 적합한 선택입니다. 이 시나리오에서는 Configuration이 참조로 걸리는 모든 Use 인스턴스보다 오래 지속되도록해야합니다. 한편

Configuration 후 비 레퍼런스 솔루션은 아마

+1

참조가 건설 후에도 유효하다는 것을 보장 할 수 없다면 사본을받는 것이 더 안전 할 것입니다. –

+1

@MikeSeymour 시나리오에 따라 다르며 복사가 잘못되어있는 시나리오가 있습니다. 예, 사용자는 – JaredPar

+0

@ JaredPar로 여기에 설명을 추가해야하지만 참조는 자주 사용되지 않지만 항상 적합합니다. 대안으로 지적해도 괜찮지 만주의해야 할 점이 있습니다. –

3

회원이 const이므로 생성자가이 멤버에 할당 할 수 없습니다.

Use(Configuration const & config) : config_(config) {} 
0

당신은 단점 멤버에 값을 할당하는 생성자에서 초기화를 사용해야 더 적절한 Use 인스턴스 당 하나가 될 것을 의미하는 경우

Use(Configuration &config) 
: config_(config) 
{ 
    ... 
} 
+0

@MikeSeymour 미안 그것은 타이핑 오류였다 :) – Mohammad

0

config을 클래스의 구성원으로 선언하면 해당 클래스를 수정할 수 없습니다. const 여기에는 회원 초기화 목록 이외의 값을 지정하려는 시도가 포함됩니다. 또한 const이 아닌 멤버 함수를 호출하려고하면 컴파일러 오류가 발생합니다. 명시 적 오류를 게시하지 않았으므로 여기서 추측하고있는 것은 예제 코드에서 인스턴스의 해당 클래스에 대한 멤버 함수를 호출 할 때 가질 수있는 가능성 일 것입니다.

0

당신은 const에 할당 할 수 없습니다하지만 당신은베이스 부재 이니셜 라이저 목록에 초기화 할 수 있습니다

class Use{ 
private: 
    const Configuration config_; 
public: 
    Use(const Configuration & config) 
     : config_(config) 
    { 
    } 
};