변수들과 참고 자료들로 이루어진 소프트웨어 덩어리
외부에서 직접 인스턴스 변수의 값을 바꿀 수 없고,
인스턴스 메소드를 통해서 간접적으로 조절하는 것
Animal animal;
// 초기화 과정 생략
animal.food += 100; // 불가능
animal.increase_food(100); // 가능
C++상에서 객체를 만들 때 사용
#include <iostream>
class Animal
{
// 멤머 변수 (접근 지시자 private으로 설정하여 캡슐화함)
private:
int food;
int weight;
// 멤버 함수
public:
void set_animal(int _food, int _weight)
{
// food는 해당 함수를 호출한 객체의 food 이므로 명시 할 필요 없음
food = _food;
weight = _weight;
}
void increase_food(int inc)
{
food += inc;
weight += (inc / 3);
}
void view_stat()
{
std::cout << "이 동물의 food : " << food << std::endl;
std::cout << "이 동물의 weight : " << weight << std::endl;
}
}; // 세미콜론이 붙음
int main()
{
Animal animal;
animal.set_animal(100, 50);
animal.increase_food(30);
// animal.food = 100; 캡슐화 되어 있으므로 접근 불가
animal.view_stat();
return 0;
}
#include <iostream>
class Date
{
int year_;
int month_;
int day_;
public:
void SetDate(int year, int month, int date)
{
year_ = year;
month_ = month;
day_ = date;
}
void AddDay(int inc)
{
day_ += inc;
if (month_ == 2)
{
AddMonth(day_ / 28);
day_ %= 28;
}
else if (month_ % 2 == 0 && month_ != 8)
{
AddMonth(day_ / 30);
day_ %= 30;
}
else
{
AddMonth(day_ / 31);
day_ %= 31;
}
}
void AddMonth(int inc)
{
month_ += inc;
if (month_ > 12)
{
AddYear(month_ / 12);
month_ %= 12;
}
}
void AddYear(int inc)
{
year_ += inc;
}
void ShowDate()
{
std::cout << year_ << '.' << month_ << '.' << day_;
}
};
int main()
{
Date date;
date.SetDate(2012, 2, 28);
date.AddDay(3);
date.ShowDate();
}
실행 결과
2012.3.3