C++ Getter and setter

2020. 3. 17. 23:44
반응형
#include <iostream>
#include <string>
using namespace std;

class Movie {
	private://code only inside of this Movie class is able to access
		string rating;
	public://any code out of this class is able to access all of the variables or sth in this class
		string title;
		string director;
		
		Movie(string aTitle, string aDirector, string aRating) {
			title = aTitle;
			director = aDirector;
			//rating = aRating;
			setRating(aRating);//setRating을 하면 아래 setRating함수를 통해서 가게 된다.
		}

		void setRating(string aRating) {
			if (aRating == "G" || aRating == "PG" || aRating == "PG-13" || aRating == "R" || aRating == "NR"){
				rating = aRating;
			}
			else {
				rating = "NR";
			}
		}

		string getRating() {
			return rating;
		}
};

int main() {
	Movie avengers("The Avengers", "Joss Whedon", "G");

	//avengers.rating = "Dog";=>rating은 private이기 때문에 접근이 불가능해서 에러가 난다.
	//cout << avengers.rating;

	avengers.setRating("PG");
	cout << avengers.getRating();

}

 먼저 Movie Class에서 title과 director 변수는 public으로 선언해주었다. 그러나 rating변수는 private으로 선언해줌으로 main함수에서 접근을 할 수가 없다. 그래서 Getter와 Setter함수를 만들어 준다.

 

 setRating부분과 getRating부분에서 getter와 setter가 각각 생성되었다.

 

 main함수로 돌아가서 main함수에서 avengers.rating을 하게 되면 Movie Class의 rating은 private이기 때문에 무서운 빨간 줄이 그어지게 되면서 오류가 난다. 그렇다면 어떻게 해야 할까? 여기서 Getter와 Setter를 이용해주면 된다.

 

 *Getter와 Setter의 동작 원리

 setRating으로 avenger의 Rating이 어떤지 확인해준다. main함수에서 처음 선언할 때는 G로 선언이 되었으나 나중에 setRating으로 PG로 바뀌게 된다. 그리고 setRating함수 안의 if문에서 PG가 있으므로 PG를 반환한다. 그렇게 avengers의 Rating은 PG가 되는 것이다.

 

 그리고 마지막 줄에서 PG를 출력해주게 된다.

반응형

+ Recent posts