삽질의 현장/- C++

#002_시(c)시(c)해서 C++?!... C와 C++의 차이 실제 예시

shovelman 2015. 7. 2. 01:32

자... 

실제로 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++을 찬양하는 것이 아닙니다.

그런데 똑같은 기능을 위해 달려나가는 둘의 모습이

많이 닮지는 않았네요...