:
enum weight{small, medium, large};
는 형태의 선언이 아닌 가변적이다. 이 시점 이후에 설정하고 얻을 수있는 weight
유형의 변수를 만들 수 있습니다.
enum weight
{
small, medium, large
};
weight mWeight;
로 당신은 지금 당신이 getter와 setter로 사용할 수있는, 클래스 멤버, mWeight
있습니다.
하지만 아직 잘 할 수 없습니다.
문제 2 :
weight
이 private
, 그래서 클래스 외부 아무도 호출자가 함수에 전달하는 weight
을 void setWeight(weight w);
불가능을 할 수있어 볼이 유형을 사용할 수 있습니다.
용이 weight
그것을 필요로하는 클래스의 모든 사용자에게 표시되도록 public
private
및 블록의 순서를 교체 한 후 블록 공중 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"
}
}
에
이
는 어리 석음의 일부 금액을 방지 할 수 있습니다.
오류를 게시하십시오. 나는'getWeight'가'int'를 반환한다고 선언되었지만'weight'를 반환한다고 정의했기 때문에 오류가 있다고 가정합니다. – Gambit
오류가 발생하지만 왜 게시하지 않았습니까? –