개발자 '쑥말고인절미'
구조체 본문
오늘 공부의 시작은 구조체이다.
(구조체는 클래스의 일종이다. 그래서 구조체 안에 함수를 정의할 수 있었던 것이다. 아래에서 정의한 구조체를 가리켜 클래스 라고 표현해도 틀리지 않다.)
함수가 포함되어 있는 C++의 구조체를 보는 순간, 다음의 정보들이 쉽게 눈에 들어와야 코드의 분석이 용이하다.
- 선언되어 있는 변수정보
- 정의되어 있는 함수정보
보통 프로그램을 분석할 때, 흐름 및 골격 위주로 분석하는 경우가 많은데 이러한 경우에는 함수의 기능만 파악하지, 함수의 세부구현까지 신경을 쓰지 않는다. 따라서 구조체를 보는 순간, 정의되어 있는 함수의 종류와 기능이 한눈에 들어오게끔 코드를 작성하는 것이 좋다.
따라서 구조체 내에 정의된 함수의 수가 많거나 그 길이가 길다면 함수의 원형선언을 구조체에 두고, 함수의 정의를 구조체 밖으로 빼낼 수 있다. 다만, 빼낸 다음에 해당 함수가 어디에 정의되어 있는지에 대한 정보만 추가해주면 된다.
아래의 두 소스는 동일한 동작을 하는 소스이다.
첫번째 소스처럼 함수를 구조체에 통채로 삽입해도 되지만, 두번째 소스처럼 구조체에 함수를 선언만 해두고 정의는 구조체 밖으로 빼내면 가독성이 더 좋아질 수 있다.
#include <iostream>
using namespace std;
struct Point{
int xpos;
int ypos;
void MovePos(int x, int y){//점의 좌표이동
xpos+=x;
ypos+=y;
}
void AddPoint(const Point &pos){//점의 좌표증가
xpos+=pos.xpos;
ypos+=pos.ypos;
}
void ShowPosition(){//현재 x, y 좌표정보 출력
cout<<xpos<<", "<<ypos<<endl;
}
};
int main(void){
Point pos1 = {12,4};
Point pos2 = {20,30};
pos1.MovePos(-7, 10);
pos1.ShowPosition(); //[5, 14] 출력
pos1.AddPoint(pos2);
pos1.ShowPosition(); //[25, 44] 출력
return 0;
}
#include <iostream>
using namespace std;
struct Point{
int xpos;
int ypos;
void MovePos(int, int); //void MovePos(int x, int y);로 적어도 OK
void AddPoint(const Point &); //void AddPoint(const Point &pos);로 적어도 OK
void ShowPosition();
};
void Point::MovePos(int x, int y){//점의 좌표이동
xpos+=x;
ypos+=y;
}
void Point::AddPoint(const Point &pos){//점의 좌표증가
xpos+=pos.xpos;
ypos+=pos.ypos;
}
void Point::ShowPosition(){//현재 x, y 좌표정보 출력
cout<<xpos<<", "<<ypos<<endl;
}
int main(void){
Point pos1 = {12,4};
Point pos2 = {20,30};
pos1.MovePos(-7, 10);
pos1.ShowPosition(); //[5, 14] 출력
pos1.AddPoint(pos2);
pos1.ShowPosition(); //[25, 44] 출력
return 0;
}'STUDY > C++ & MFC' 카테고리의 다른 글
| 참조자와 포인터 (0) | 2022.04.06 |
|---|---|
| 문제 04-2 [다양한 클래스의 정의] (0) | 2022.04.04 |
| 댓글로 메모 (28) | 2022.04.04 |
| 문제 04-1 [정보은닉과 const] (0) | 2022.04.04 |
| 문제 03-2 [클래스의 정의] (0) | 2022.04.04 |