C언어(태초)
#include <iostream>
typedef struct USERDATA
{
int nAge;
char szName[32];
} USERDATA;
int main(void)
{
USERDATA user = { 28, "승우" };
printf("%d, %s\n", user.nAge, user.szName);
return 0;
}
간단한 C언어이다. 이 USERDATA라는 놈을 출력 하려면 사용자가 USERDATA 구조체의 구성을 다 알아야 한다. (nAge의 타입은 int니깐 %d로 찍고 등등)
만약 USERDATA 구조체를 만든 제작자가 출력해주는 코드를 같이 짜준다면??
#include <iostream>
typedef struct USERDATA
{
int nAge;
char szName[32];
} USERDATA;
void PrintData(USERDATA* pUser)
{
printf("%d, %s\n", pUser->nAge, pUser->szName);
}
int main(void)
{
USERDATA user = { 28, "승우" };
PrintData(&user);
return 0;
}
사용자는 그저 PrintData를 호출하기만 하면 된다. USERDATA의 멤버의 구성을 일일히 다 알 필요가 없다는 뜻!
이런 PrintData를 인터페이스 함수라고 부른다.(내부는 모르겠고 인터페이스를 통해서 알아서 좀 해줘~!)
근데 좀 허전하다 USERDATA 구조체와 PrintData가 무슨 관계가 있는지 어떻게 아냐? 좀 묶을 필요가 있다. 사용자가 헷갈리지 않도록.
구조체안에 함수도 한번 넣어봐라.
#include <iostream>
typedef struct USERDATA
{
int nAge;
char szName[32];
void(*MyPrint)(struct USERDATA*);
} USERDATA;
void PrintData(USERDATA* pUser)
{
printf("%d, %s\n", pUser->nAge, pUser->szName);
}
int main(void)
{
USERDATA user = { 28, "seungwoo", PrintData};
user.MyPrint(&user);
return 0;
}
구조체 USERDATA의 주소값을 파라미터로 가지는 MyPrint 함수를 구조체 안에 넣었다. 그리고 PrintData로 초기화했다.
진짜 구조체안에 함수를 넣으려고 애썼다. 근데 한가지 아쉬운점은 자기자신의 주소를 한번 더 파라미터로 넘긴다는점.
야 니꺼 니가 접근하는데 도대체 니 주소를 왜...?? 안되겠다 Class 만들자.
C++ Class 탄생
class USERDATA
{
public:
int nAge;
char szName[32];
void MyPrint(void)
{
std::cout << this->nAge << " " << this->szName << std::endl;
}
};
int main(void)
{
USERDATA user = { 28, "seungwoo"};
user.MyPrint();
return 0;
}
이런식으로 만들면 정말 이쁘다 이뻐.. c++에서 MyPrint 메소드를 호출할 때 사실은 &user가 파라미터로 넘어간다. 이것을 히든 파라미터라고 부른다.
'C++' 카테고리의 다른 글
C++ 깊은복사 얕은복사 (0) | 2020.02.02 |
---|---|
C++ 복사 생성자(참조형 파라미터) (0) | 2020.02.01 |
C++ this 포인터 (0) | 2020.02.01 |
C++ 참조자 형식(reference) (0) | 2020.01.27 |
C++ new 메모리 동적할당 (0) | 2020.01.27 |