Notice
잡담소장소
기밀태씨 강의 본문
1. 포인터의 기본.
#include <stdio.h>
typedef struct _IntStruct
{
int val;
} IntStruct;
void changeValue(int *a)
{
*a = 10; //받은 주소값에 해당하는 저장된 값을 변경
}
void changeStruct(IntStruct *s)
{
s->val = 20; //받아온 포인터를 이용한 값 변경
}
void makeStruct(IntStruct **s) //포인터의 주소값의 주소값을 가져옴
{
IntStruct* tmp;
tmp = (IntStruct*) malloc(sizeof(IntStruct));
tmp->val = 30;
*s = tmp; //주소값의 주소값을 바꿈 ( 아무런 값이 없는 10001번 주소의 struct를 val이 30인 10002번 주소의 struct로 덮어 씌움
}
int main()
{
int a;
IntStruct* b;
IntStruct* c;
a = 0;
changeValue(&a); // 주소값 넘김
printf("%d\n", a);
b = (IntStruct*) malloc(sizeof(IntStruct));
b-> val = 0;
changeStruct(b); //포인터 자체를 넘김
printf("%d\n", b->val);
makeStruct(&c); //포인터의 주소값을 넘김
printf("%d\n", c->val);
free(c);
return ;
}
우리는 C의 포인터와 malloc을 배웠어요
malloc은 보통 구조체에 사용할 메모리를 할당하는데 쓰지요
C++에서는 클래스와 객체가 도입되었는데
사실 C++에서 클래스와 구조체는 완전히 똑같습니다.
대신 다른 점은
C에서 할 수 없었던
private, public같은 access modifier와
그리고 구조체에 고유의 함수를 정의할 수 있다는 점이죠
자 그럼 C의 구조체와 C++의 구조체의 차이를 알아봤으니
둘 사이의 생성 방식도 다르다는 것과
어떻게 생성하는지 원리를 볼까요
C에서는 구조체를 malloc을 이용해서 보통 생성하죠?
근데 여기에는 귀찮은 점이 있어요.
malloc은 메모리를 할당만 하지
그 안에 값을 어떻게 해야 할지는 전혀 상관하지 않아요
그래서
구조체에 int가 선언되었다면
그 안에 값이 0일 거라고 생각하면 매우 오산이예요
메모리에 무슨 값이 들어있을지 모르니까
그러니까 구조체를 쓰려면 원래
처음에 메모리를 할당 받아서 그 안에
무슨 값이 초기값으로 들어가 있을지를
써주어야 해요.
그래서 C++을 만든 훌륭한 사람들은
생성자 라는것을 고안해 냈지요
생성자란 객체에 메모리가 할당되면
어떤 함수가 반드시 호출 되도록 만든거예요
그래서 사실 생성자는 두가지 일을 해요
1. 객체가 생성될 수 있도록 메모리를 할당합니다.
2. 생성자 함수를 호출해서 객체를 초기화하게 해줍니다.
여기까지 오케이?
이건 우리가 잘 아는 php도 똑같아요.
typedef struct _IntStruct
{
int val;
} IntStruct;
void changeValue(int *a)
{
*a = 10; //받은 주소값에 해당하는 저장된 값을 변경
}
void changeStruct(IntStruct *s)
{
s->val = 20; //받아온 포인터를 이용한 값 변경
}
void makeStruct(IntStruct **s) //포인터의 주소값의 주소값을 가져옴
{
IntStruct* tmp;
tmp = (IntStruct*) malloc(sizeof(IntStruct));
tmp->val = 30;
*s = tmp; //주소값의 주소값을 바꿈 ( 아무런 값이 없는 10001번 주소의 struct를 val이 30인 10002번 주소의 struct로 덮어 씌움
}
int main()
{
int a;
IntStruct* b;
IntStruct* c;
a = 0;
changeValue(&a); // 주소값 넘김
printf("%d\n", a);
b = (IntStruct*) malloc(sizeof(IntStruct));
b-> val = 0;
changeStruct(b); //포인터 자체를 넘김
printf("%d\n", b->val);
makeStruct(&c); //포인터의 주소값을 넘김
printf("%d\n", c->val);
free(c);
return ;
}
2. object c에서의 객체 생성과 소멸
생성자: 클래스 객체를 생성하고 초기화하는 메소드
소멸자: 메모리가 할당된 객체의 메모리를 회수
이하 네이트온 대화 발췌 (-_-;;)
code 태그를 쓰고싶은데 왜 못쓰는가..
tistory는 제공해달라 ㅠㅠ 해달라 ㅠㅠ
반응형
'Study ;3' 카테고리의 다른 글
What is Node.js ? (0) | 2012.12.04 |
---|---|
SyntaxHighlighter Test (0) | 2012.07.20 |
리마인드용 개발 이야기 (0) | 2012.05.08 |
프로시저 isqlplus에서 실행하는 방법 (0) | 2012.04.18 |
javascript의 이런 저런 (0) | 2012.04.17 |
Comments