C++ Class vs C Struct + Function()
# C++ 에서의 클래스에 대한 간단한 이론
▲ 머 이런느낌?
## C++ Class 와 vs C언어의 Struct +Function 관계
▲C언어에서는 구조체를 선언할때 앞에 항상 struct를 붙였었죠....
붙이지 않았을때는 컴파일 오류가 발생했었습니다.
그러나 C++에서는 구조체를 선언할 때
struct를 생략하여도 된다는점.. 좋죠!!!!
1.[C++]구조체 활용
▲ 1번째 방법
기본적으로 구조체를 활용하여 출력하는 방법입니다.
설명없이 넘어가겠습니다.
2. [C++} 피호출자 함수에게 구조체 전달
▲2번째 방법
함수를 만들어서 구조체 포인터를 받도록 매개변수를 선언하였습니다.
UserDataPrint() 함수를 호출하기 위해서 사용자는 단지 구조체의 주소만 넘겨주면 됩니다.
3. [C++] 구조체 안에서 함수 포인터
▲3번째 방법
7번행을 보시면 구조체 안에서 함수포인터 형태를 취하고 있습니다.
7번행 void(*Print)(struct USERDATA *); 함수의 형태를 그대로 받아왔습니다.
15번행_tmain()함수에서는
u 함수포인터 맴버Print() 에 u구조체의 주소를 넘겨줍니다.
그런데 여기서 조금 웃긴 부분이 있습니다.
u.Print(&u);
자신의 맴버를 사용하는데, 자신의 주소를 몰라 주소를 물어본다는 것이 이상하지 않습니까?
이 말은 내 집을 가는데 네비게이션을 켜고 가는 것과 다름없다는 것이죠.
혹은
누군가의 자식이라고 하는데, 부모의 이름을 모르는 격이죠.
4번째 방법에서 이를 해결하는 광경을 보실수 있을 것입니다.
이제는 조금 Class에 다가가고 있어 보입니다.
나이 : 25 // 이름 코리훈
4. [C++] C++ 스타일로 구조체 안의 함수포인터 사용
▲4번째 방법
함수호출만 본다면
21번행의 방법이
딱 C++ 스러운 문법입니다.
그렇다면 C++ 스러운 방법을 한 번 연출 해볼까요?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include "stdafx.h" #include <iostream> struct USERDATA{ int nAge; char szName[32]; void UserDataPrint(USERDATA *pu){ printf("나이: %d // 이름: %s\n", pu->nAge, pu->szName); } }; int _tmain(int argc, _TCHAR* argv[]) { USERDATA u = { 25, "코리훈"}; u.UserDataPrint(&u); return 0; } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include "stdafx.h" #include <iostream> struct USERDATA{ int nAge; char szName[32]; void UserDataPrint(USERDATA *pu){ printf("나이: %d // 이름: %s\n", pu->nAge, pu->szName); } void UserNewDataPrint(){ printf("나이: %d // 이름: %s\n", nAge,szName); } }; int _tmain(int argc, _TCHAR* argv[]) { USERDATA u = { 25, "코리훈"}; u.UserDataPrint(&u); u.UserNewDataPrint(); return 0; } | cs |
C++에서는 20번행 처럼 매개변수가 생략되어있는 것 같지만 메모리를 뜯어보면 주소를 전달합니다.
디버거 모드로 살펴보면 7번행과 11번행에서 같은 주소를 호출한다는 점을 포착 할 수 있을 것입니다.
### Class의 기본 문법 (쉬워용)
class 클래스명
{
접근제어지시자:
맴버변수선언;
맨버함수선언 및 정의;
};
클래스 기본문법 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include "stdafx.h" #include <iostream> class USERDATA{ public: int nAge; char szName[32]; void UserDataPrint(){ printf("나이: %d // 이름: %s\n", nAge, szName); } }; int _tmain(int argc, _TCHAR* argv[]) { USERDATA u = { 24, "코리훈" }; u.UserDataPrint(); return 0; } | cs |
결론적으로 C/C++ 에서의 Class는 C언어 에서의 "구조체+함수+ ∂(상속,접근제어지시자)" 라고 할 수 있겠습니다.
'훈, IT 공부 > C,C++,MFC' 카테고리의 다른 글
[C++ STL]vector 백터란 (0) | 2018.04.21 |
---|---|
[프로그램]강아지와 병아리 ( 다리개수 ) +손코딩연습 (0) | 2018.02.28 |
[프로그램]복권(로또)게임 #랜덤으로 뽑기(자동) (0) | 2018.01.30 |
포인터에 대해서 깊고 세밀하고 정확하게 이해하기!!! (0) | 2018.01.24 |
[프로그램]숫자 야구 게임 (3) | 2018.01.24 |
댓글