티스토리 뷰
typedef class _cTest{
private:
int a;
int b;
public:
void set_a(int i)
{
a = i;
}
void print_a()
{
cout << a << endl;
}
} cTest, *kTest;
typedef cTest* pTest;
cTest test_f(cTest);
kTest ptest_f(kTest);
int _tmain(int argc, _TCHAR* argv[])
{
cTest test;
pTest ptest;
ptest = &test; //반드시 선행돼야한다. 이게 없으면 ptest는 껍데기일 뿐이다. 이 시행을 해준 덕분에 ptest를 조작하면 test의 값도 변경된다.
cout << "default" << endl;
test.set_a(3);
test.print_a();
cout << "func call" << endl;
test_f(test);
cout << "after func call" << endl;
test.print_a(); //바뀌지 않음
cout << "pdefault" << endl;
ptest->set_a(3);
ptest->print_a();
cout << "pfunc call" << endl;
ptest_f(ptest);
cout << "after pfunc call" << endl;
ptest->print_a(); //바뀜
cout << "what is the test value?" << endl;
test.print_a(); //test의 값이 바껴있다.
return 0;
}
cTest test_f(cTest test)
{
test.set_a(4);
test.print_a();
return test;
}
pTest ptest_f(pTest ptest)
{
ptest->set_a(4);
ptest->print_a();
return ptest;
}
코드를 보면 똑같은 타입을 일부로 이것저것 막 적어놓았는데(kTest와 pTest는 동일합니다)
typedef class _cTest{
private:
int a;
int b;
public:
void set_a(int i)
{
a = i;
}
void print_a()
{
cout << a << endl;
}
} cTest, *kTest;
이부분은 사실
class cTest{
private:
int a;
int b;
public:
void set_a(int i)
{
a = i;
}
void print_a()
{
cout << a << endl;
}
};
typedef cTest* kTest; 이렇게 바꿔줘도 전혀 상관이 없습니다.
하지만 클래스를 생성하면서 한번에 포인터형도 선언해 준다니~ 얼마나 편합니까 ㅎㅎ
웬만하면 클래스 생성할때 typedef로 하여서 포인터 형도 함께 선언합시다~ㅎㅎ
코드의 결과는 예상하신대로입니다.
포인터형 클래스(구조체) 호출 뒤에는 main에서도 값이 변경된답니다.
뱀발) 이런것도 먹힌다는거~
typedef int in, *pin;
in ti = 3;
pin pti = &ti;
cout << ti << endl;
*pti = 8;
cout << ti << endl;
포인터를 쓰는 주된 이유중 하나는 이함수 저함수 불려갔다가 나오면 값이 적용되어 나오도록 해주기 위함이겠죠? 물론 전역으로 해주어도 되겠지만 메모리 관리의 효율성을 위하여..
'Language > C C++' 카테고리의 다른 글
헤더에서 컴파일러 구분하기 (0) | 2010.04.27 |
---|---|
함수 이름 앞에 ::가 붙는 경우 (0) | 2010.04.07 |
extern "C"와 function overload (0) | 2009.09.02 |
유니코드 프로그래밍 (0) | 2009.02.13 |
미리 컴파일된 헤더 - PCH 에러 해결법 (0) | 2008.12.09 |
함수로 배열 리턴 받는 방법 (2) | 2008.12.09 |
여러개의 c파일에서 변수 끌어다 쓰기 (0) | 2008.12.08 |
전처리기에 대하여 (0) | 2008.11.13 |
- Total
- Today
- Yesterday
- gcc
- C
- MFC
- Python
- kering
- Visual C++
- Quiz
- AWS
- source
- API
- 프로그래밍
- driver
- winapi
- Cloud
- C++
- linux
- java
- Troubleshooting
- 안드로이드
- 리눅스
- 음악
- NDK
- database
- 드라이버
- it
- android
- jni
- jni강좌
- db
- algorithm
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |