[C++] 객체

·2023년 8월 16일
0

C++

목록 보기
3/17
post-custom-banner

객체

변수들과 참고 자료들로 이루어진 소프트웨어 덩어리


캡슐화

외부에서 직접 인스턴스 변수의 값을 바꿀 수 없고,
인스턴스 메소드를 통해서 간접적으로 조절하는 것

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;
}

Date 클래스 만들기

#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

post-custom-banner

0개의 댓글