자...
실제로 C와 C++의 똑같은 목적을 가진 코드를 볼 것인데요,
똑같은 방향을 바라보는 C와 C++이
어떻게 달리 구현되는지 확인해보도록 하겠습니다.
우선 C의 입장에서 헤더파일을 만들어보도록 하겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #pragma once #define MAX_NAME_LEN 200 typedef struct _Member { int num; char name[MAX_NAME_LEN+1]; int iq; }Member; Member *NewMember(int num, const char* name); void DeleteMember(Member* member); void Member_View(Member* member); void Member_View(Member* member); | cs |
자.. 헤더파일을 살펴보도록 하죠... Member라는 구조체 하나를 정의했군요...
C++에서는 어떻게 할까요?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #pragma once #include <string> using namespace std; class Member { int num; string name; int iq; public: memeber(int num, string name); void Study(int scnt); void View(); }; | cs |
자 C++ 에서의 헤더를 만들어 본 것입니다...
C언어에서는 구조체를 이용해서 사용자 형식을 정의합니다.
이 구조체 안에는 다양한 형의 변수들이 들어갈 수 있죠... 이것을 바로 캡슐화라고 할 수 있습니다.
캡슐화란 여러 개의 멤버를 하나의 형식으로 묶어서 정의하는 것을 말합니다...
그러면 C언어랑 다를게 뭐가 있냐 하신다면 아래를 보시죠...
C++에서는 멤버 변수 뿐만이 아닌, 함수까지도 캡슐화를 할 수 있습니다.
자세하게 보시면 아실 것이 Member라는 Class에 한 묶음으로 묶여져 있죠?
C는 보시면 구조체를 선언하고 그 아래 사용할 함수들의 시그니처들을 정의해두고 있습니다...
아하... C++은 변수 메소드를 하나로 묶을 수 있구나...
이제 Main 함수를 살펴보도록 하죠... 우선 C입니다.
자.. 확연한 구분을 위해 바로 C++로 넘어갑니다.
1 2 3 4 5 6 7 8 9 | void main() { Member* member = new Member(2, "삽잡이"); member->Study(5); member->View(); member->Study(3); member->View(); delte member; } | cs |
와우....
C에서는 모두 따로따로 해줘야하는 불편함이 있습니다...
C만할때는 몰랐는데... 그쵸?
C언어의 구조체는 모든 곳에서 주소를 날리며 접근을 할 수 있는데요,
아무튼... 그건 다음에 설명하도록 하고요...
다음 시간에 자세하게 설명하도록 하겠지만, 그냥 눈으로만 봐도
간단하다라는 것을 느낄 수 있고요...
쉽게 설명하자면 죽어있는 Member에게 생명을 불어넣는?
Member라는 살아있는 놈의 모든 내부를 건드는 것이죠...
Member라는 자기 자신에게 정의되어 있는 것들을 만지작 거리니... 뭐 이상할거 없죠?
마지막으로 각 함수들이 모여있는 파일들을 확인해보죠...
C입니다~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #define MAX_IQ 200 void Member_Member(Member *member,int num,const char *name); Member *NewMember(int num,const char *name) { Member *member = 0; member = (Member *)malloc(sizeof(Member)); Member_Member(member,num,name); return member; } void Member_Member(Member *member,int num,const char *name) { member->num = num; memset(member->name,0,sizeof(member->name)); strncpy(member->name,name,MAX_NAME_LEN); member->iq = 0; } void DeleteMember(Member *member) { free(member); } void Member_Study(Member *member,int scnt) { printf("공부를 하다니...\n"); member->iq += scnt; if(member->iq >MAX_IQ) { member->iq = MAX_IQ; } } void Member_View(Member *member) { printf("번호:%d 이름:%s 지력:%d\n", member->num,member->name,member->iq); } | cs |
C++입니다~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include "Member.h" #include <iostream> #define MAX_IQ 200 Member::Member(int num,string name) { this->num = num; this->name = name; iq = 0;//this->iq = 0; } void Member::Study(int scnt) { cout<<"공부를 하다니..."<<endl; iq += scnt; if(iq>MAX_IQ) { iq = MAX_IQ; } } void Member::View() { cout<<"번호:"<<num<<" 이름:"<<name<<" 지력:"<<iq<<endl; } | cs |
다시 말씀드리지만... 내용들에 관한 것들은 차차 알아가도록 할 것입니다.
오늘은 C와 C++에 대한 차이를 살펴보는 것이죠...
와우... 느껴지십니까? C++을 찬양하는 것이 아닙니다.
그런데 똑같은 기능을 위해 달려나가는 둘의 모습이
많이 닮지는 않았네요...
'삽질의 현장 > - C++' 카테고리의 다른 글
#006_시(c)시(c)해서 C++?!_클래스간의 관계 (0) | 2015.07.06 |
---|---|
#005_시(c)시(c)해서 C++?!... 조금은 불편한 생성자... (0) | 2015.07.02 |
#004_시(c)시(c)해서 C++?!... C와 C++의 변수와 동적할당 (0) | 2015.07.02 |
#003_시(c)시(c)해서 C++?!... C와 C++의 캡슐화차이 (0) | 2015.07.02 |
#001_시(c)시(c)해서 C++!?... C와 C++의 차이 (0) | 2015.07.02 |