객체는 영어로 Object이다. C++에서 말하는 Object의 의미는 "사물, 또는 대상" 즉 Object는 우리 주변에 존재하는 물건(연필, 나무 등)이나 대상(철수, 친구, 선생님 등) 전부를 의미한다.
예) "나는 과일장수에게 두 개의 사과를 구매했다!"
이 문장에 삽입되어 있는 객체의 종류는 과일장수, 나, 사과 가 있다.
예의 문장을 실행시키려면 나라는 객체는 과일장수라는 객체로부터 과일객체의 구매라는 액션을 취할 수 있어야 한다.
객체지향 프로그래밍은 현실에 존재하는 사물과 대상, 그리고 그에 따른 행동을 있는 그대로 실체화시키는 형태의 프로그래밍이다.
객체는 하나 이상의 상태 정보(데이터)와 하나 이상의 행동(기능)으로 구성이 된다
- 상태 정보는 변수를 통해서 표현된다
- 행동은 함수를 통해서 표현된다.
#include <iostream>
using namespace std;
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 SaleApples(int money){
int num=money/APPLE_PRICE;
numOfApples-=num;
myMoney+=money;
return num;
}
void ShowSalesResult(){
cout<<"남은 사과: "<<numOfApples<<endl;
cout<<"판매 수익: "<<myMoney<<endl<<endl;
}
};
class FruitBuyer{
int myMoney;
int numOfApples;
public:
void InitMembers(int money){
myMoney=money;
numOfApples=0;
}
void BuyApples(FruitSeller &seller, int money){
numOfApples+=seller.SaleApples(money);
myMoney-=money;
}
void ShowBuyResult(){
cout<<"현재 잔액: "<<myMoney<<endl;
cout<<"사과 개수 : "<<numOfApples<<endl<<endl;
}
};
int main(void){
FruitSeller seller;
seller.InitMembers(1000,20,0);
FruitBuyer buyer;
buyer.InitMembers(5000);
buyer.BuyApples(seller, 2000); //과일의 구매!
cout<<"과일 판매자의 현황"<<endl;
seller.ShowSalesResult();
cout<<"과일 구매자의 현황"<<endl;
buyer.ShowBuyResult();
return 0;
}
결과
과일 판매자의 현황
남은 사과: 18
판매 수익: 2000
과일 구매자의 현황
현재 잔액: 3000
사과 개수 : 2
위의 코드를 살펴보면 두 개의 클래스 FruitSeller와 FuitBuyer 가 있는 것을 볼 수 있다.
FruitSeller를 살펴보면 상태변수 APPLE_PRICE, numOfApples, myMoney를 정의한 것을 볼 수 있고 행동함수 InitMembers, SaleApples, ShowSalesResult를 정의한 것을 볼 수 있다.
FuitBuyer을 보면 상태변수 myMoney, numOfApples를 정의하였고 행동함수 InitMembers, BuyApples, ShowBuyResult를 정의하였다.
위 함수에서 주의 깊게 살펴 봐야 할 부분은 FruitBuyer의 행동함수 BuyApples 부분이다 이 함수는 FruitSeller의 객체를 가져와 FruitSeller의 행동함수 SaleApples를 이용하여 money로 살 수 있는 사과의 개수를 뽑아낸 다음 FruitBuyer의 numOfApples(구매한 사과의 개수)에 저장한다. 이 함수를 뜻하는 것은 '나'라는 객체가 '과일장수'라는 객체로부터 '과일' 객체를 구매하는 행위를 그대로 표현한 것이다.
따라서 FruitBuyer 객체가 FruitSeller 객체에게 "seller 아저씨, 사과 2,000원어치 주세요"라는 메시지를 전달한 함수라고 볼 수 있다.
객체지향에서는 이러한 형태의 함수호출을 가리켜 '메시지전달(Message Passing)'이라 한다.
'c++' 카테고리의 다른 글
[C++] Const 함수 (0) | 2023.02.18 |
---|---|
[C++]정보은닉(information Hiding) (0) | 2023.02.18 |
[C++]파일분할 (0) | 2023.02.10 |
[C++]클래스와 객체 (0) | 2023.02.09 |
[C++] 구조체 (0) | 2023.02.06 |