2017-03-26 11 views
-2

다음 코드가 있는데 열거 자용 getter 및 setter 메서드를 작성하려고합니다. 수 많은 시도 후에도 여전히 오류가 발생하기 때문에 누군가 제 코드를 수정 해 주실 수 있습니까? 이것에 어떤 도움을 주셔서 감사합니다! 문제 1열거 자용 setter 및 getter 메서드 C++

///in the header file 

    class Car{ 

    private:  

     enum weight{small, medium, large}; 
    public: 


     Car(); 


     int getWeight() const; 



     void setWeight(weight w); 

    }; 
////// in the car.cpp file 
//default constructor 
Car::Car(){ 

    weight =small; 

} 

     weight Car::getWeight() const{ 
     return weight; 
     } 



     void Car::setWeight(weight w){ 
     weight = w; 
     } 
+0

오류를 게시하십시오. 나는'getWeight'가'int'를 반환한다고 선언되었지만'weight'를 반환한다고 정의했기 때문에 오류가 있다고 가정합니다. – Gambit

+0

오류가 발생하지만 왜 게시하지 않았습니까? –

답변

0

:

enum weight{small, medium, large}; 

는 형태의 선언이 아닌 가변적이다. 이 시점 이후에 설정하고 얻을 수있는 weight 유형의 변수를 만들 수 있습니다.

enum weight 
{ 
    small, medium, large 
}; 
weight mWeight; 

로 당신은 지금 당신이 getter와 setter로 사용할 수있는, 클래스 멤버, mWeight 있습니다.

하지만 아직 잘 할 수 없습니다.

문제 2 :

weightprivate, 그래서 클래스 외부 아무도 호출자가 함수에 전달하는 weightvoid setWeight(weight w); 불가능을 할 수있어 볼이 유형을 사용할 수 있습니다.

용이 weight 그것을 필요로하는 클래스의 모든 사용자에게 표시되도록 publicprivate 및 블록의 순서를 교체 한 후 블록 공중 enum weight 정의 이동에 의해 해결했다.

class Car 
{ 
public: 
    enum weight 
    { 
     small, medium, large 
    }; 


    Car(); 

    int getWeight() const; 

    void setWeight(weight w); 

private: 
    weight mWeight; 
}; 

문제 3 :

int getWeight() const; 

weight Car::getWeight() const 

정확한 버전 중량을 반환 것으로 보인다가 일치하지

때문에

class Car 
{ 
public: 
    enum weight 
    { 
     small, medium, large 
    }; 


    Car(); 

    weight getWeight() const; 

    void setWeight(weight w); 

private: 
    weight mWeight; 


}; 
01,

문제 4 :

weight과 같은 것이 없습니다. 주울 만이 있습니다. 죄송합니다. Car::weight 만 있으므로 컴파일러에서 함수가 Car의 일부인지 알 때까지 명시해야합니다.

weight Car::getWeight() const{ 
    return weight; 
    } 

Car::weight Car::getWeight() const{ 
    return weight; 
    } 

사이드 참고가 될 필요가있다 : 당신이 아무 제한 세터와 게터가있을 때 당신은뿐만 아니라 변수 public 할 수 있습니다. 구성원 변수 private을 작성하는 전체 요점은 객체의 상태를 보호하는 것입니다. 어떤 외부인이 객체를 인식하지 않고 변수를 변경할 수 있으면 버그를 추적하기가 어렵습니다.

위와 같은 사소한 경우에는별로 중요하지 않지만 카운터가있는 수업이 있고 그 카운터가 42에 이르면 중요한 일이 발생합니다.그리고 어떤 조커가 나타나서 (43)에 대한 값을 설정하려면이 세터

void setImportantNumber(int val) 
{ 
    importantNumber = val; 
} 

를 사용? 캡슐화는 캡쳐를 위반했기 때문에 누구에게도 도움이되지 않았습니다. 반면

void setImportantNumber(int val) 
{ 
    if (val) < 42) 
    { 
     importantNumber = val; 
    } 
    else if (val == 42) 
    { 
     importantNumber = 0; 
     doSomethingImportant(); 
    } 
    else 
    { 
     cerr << "I'm afraid I can't let you do that, Dave.\n" 
    } 
} 

는 어리 석음의 일부 금액을 방지 할 수 있습니다.

+0

고마워요. 이것은 정말로 도움이되었습니다. – Mary

0

위에 게시 된 정보를 사용하여 아래 코드와 같이 코드가 변경되었습니다. 감사!

//Car.h:  
enum weight 
    { 
     small, medium, large 
    }; 


class Car{ 
private: 
    weight mWeight; 

public: 
    Car(); 
    weight getWeight() const; 
}; 


//Car.cpp file 
    Car::Car(){  
    mWeight = large; 

} 

weight Car::getWeight() const{ 
    return mWeight; 
}