업데이트:

태그: ,

카테고리:



REF : 윤성우의 열혈 C++

객체지향 프로그래밍의 이해

  • 객체 : object
    • 사물 또는 대상
  • 객체지향 프로그래밍 :
    • 현실에 존재하는 사물, 대상, 행동을 있는 그대로 실체화시키는 형태의 프로그래밍.


객체를 이루는 데이터와 기능

  • 과일 장수의 예시
    1. 과일을 판다.
    2. 사과 20개, 오렌지 10개를 보유한다.
    3. 현재까지의 수익은 50000이다.
    • 1은 객체의 행동(기능)
    • 2,3 은 객체의 데이터(state)를 의미.
  • 기능을 함수로 표현
      int SaleApple(int money) //사과 구매액을 매개변수로
      {
          int num = money/1000; //사과는 개당 1000원
          numOfApples -= num;//판매한 갯수만큼 사과 줄어듦
          myMoney += money;//구매액 만큼 보유하는 돈 증가
          return num;//구매된 사과 갯수 반환
      }
    


과일장수의 정의와 멤버변수의 상수화

  • 과일장수 클래스
      class FruitSeller
      {
      private:
          int APPLE_PRICE;
          int numOfApples;
          int myMoney;
      public:
          void InitMembers(int price, int num, int money) //멤버변수 초기화 기능
          {
              APPLE_PRICE = price;
              numOfApples = num;
              myMoney = money;
          }
          int SaleApple(int money) //사과를 파는 기능
          {
              int num = money/1000; //사과는 개당 1000원
              numOfApples -= num;//판매한 갯수만큼 사과 줄어듦
              myMoney += money;//구매액 만큼 보유하는 돈 증가
              return num;//구매된 사과 갯수 반환
          }
          void ShowSalesResult()//현재 상태 보여주는 기능
          {
              cout<<"남은 사과 :" <<numOfApples<<endl;
              cout<<"판매 수익 :" <<myMoney<<endl;
          }
      };
    


  • 멤버변수의 상수화
    • 사과의 가격을 상수화 시켜주고싶다면?
    • const int APPLE_PRICE=1000; (x)
      • 멤버변수 선언문에서 초기화는 불가능하다.
    • const in APPLE_PRICE; (x)
      • 상수는 선언과 동시에 초기화되어야한다.
    • 생성자를 공부해야 할 수 있다.


구매자 클래스

  • 멤버변수 :
    • 소유한 현금액 : int myMoney;
    • 소유한 사과 개수 : int numOfApples;
  • 기능 :
    1. 멤버변수 초기화
    2. 사과 사는 기능
    3. 현재상태 보여주는 기능


  • 클래스 정의
      class FruitBuyer
      {
              int myMoney; //private
              int numOfApples; //private
          public:
              void InitMembers(int money)
              {
                  myMoney = money;
                  numOfApples = 0;
              }
              void BuyApples(FruitSeller &seller, int money)
              {
                  numOfApples+=seller.SaleApple(money);
                  myMoney -= money;
              }
              void ShowBuyResult()//현재 상태 보여주는 기능
              {
                  cout<<"현재 잔액 :" <<myMoney<<endl;
                  cout<<"사과 개수 :" <<numOfApples<<endl;
              }
      };
    


클래스 기반의 두 가지 객체생성 방법

  • 클래스 내의 함수와 변수를 사용하기 위해서는 클래스를 실체화 시켜야한다.
  • 이를 객체화한다고 한다.
  • 여기에는 2가지 방식이 있다.
    1. 일반적인 변수선언 방식
       ClassName objName;
       FruitSeller seller;
       FruitSeller buyer;
      
    2. 동적 할당방식
       ClassName *ptrObj = new ClassName;
       FruitSeller *objPtr1 = new FruitSeller;
       FruitBuyer *objPtr2 = new FruitBuyer;
      
  • 사과장수 시뮬레이션 예제


객체간의 대화방법

void BuyApples(FruitSeller &seller, int money)
{
	numOfApples+=seller.SaleApple(money);
	myMoney -= money;
}

buyer 객체는 seller객체의 SaleApple이라는 함수를 호출한다.

하나의 객체가 다른 하나의 객체에게 메시지를 전달하는 방법은 함수호출을 기반으로한다.
이를 메시지 전달이라한다.

댓글남기기