일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리눅스
- 드라이버
- MFC
- Troubleshooting
- C
- kering
- it
- java
- Quiz
- UI
- Visual C++
- jni강좌
- source
- NDK
- InstallShield
- gcc
- jni
- 프로그래밍
- winapi
- sqlite3
- control
- API
- db
- 음악
- driver
- android
- Install Shield
- 안드로이드
- linux
- C++
- Today
- 158
- Total
- 530,647
목록C++ (17)
JHB의 프로그래밍 삽질기
배열과 포인터가 동치라는 것은 이미 알고 있다. 예를 들어서 a[3]은 *(a+3) 이 되는 것이다. 하지만 다른 점은 배열은 포인터 상수로 선언 된다는 점이다. 즉 * const 이다. 따라서 int a[3]; int b[3]; 이 있을 때, a는 a[3]배열의 시작 주소를 나타내고 b 역시 b[3]배열의 시작 주소를 나타내지만 a = b; 는 할 수 없다. 왜냐면 const이기 때문에!! 해주고 싶다면 int a[3], int *b; ..
int go( int search, int a, int b, int state, int turning ) { if( found == 1 ) return 1; if( turning > 3 ) //맨처음 시작을 생각해서 3임 { return 0; } if( map[a][b] == search && state != START ) { sx = a; sy = b; found = 1; return 1; } v[a][b] = 1; //U if..
우선.. C++에서 CTest라는 클래스가 있을 경우 해당 객체에 대한 선언은 다음과 같이 할 수 있다. CTest test1, test2; 이 경우에 const를 붙여 쓰는 사람은 아마 거의 없을 것이다 -.-;; 그럴거면 왜 만들었어.. 만약 저 앞에 const CTest test1, test2; 이런식으로 const를 붙였다면 더이상 해당 객체는 변경을 할 수 없게 된다. 자 그럼 const가 사용되는 다양한 예를 쭉 적어보자 const CT..
이중 포인터를 사용하는건 주로 포인터의 동적 배열을 나타내기 위해서 이다. 우선 아래와 같은 클래스가 하나 있다고 가정 해보자. class CTest { public: CTest() {} int a; }; 이녀석에 대한 포인터를 선언하고 객체 하나를 생성하려면 어떻게 해야할까? 다음과 같이 써주면 된다. CTest *pTest = new CTest; 이렇게 하면 pTest는 CTest의 객체를 참조한다. 근데..
파라미터 없는 void function의 경우 그냥 소스가 길어지는게 싫어서 다른 곳으로 구분해 놓을려고 쓰게 된다. 뭐 그런 경우는 괜찮다 쳐도, 어느 기능을 담당하고 있는 녀석이 그런 식으로 분류 돼있다면 참으로 슬프다. 지금 딱 그것을 느끼게 되는 상황과 맞닿게 되었는데 그 내용은 다음과 같다. 로딩한 트랙킹 데이터(시간 순서로 순차적으로 놓여져 있음)를 재생함에 있어 타임라인이 필요하여 타임라인을 구현 하였다. 그리고 타임라인의 ..
클래스를 주고 받을땐 레퍼런스를 사용하자!! 클래스 전체를 call by value로 넘긴다면 그 메모리는 어머어머하지만 레퍼런스로 넘기게 되면 겨우 포인터 변수의 크기 만큼만 넘기고 끝이다. 예를 들어서 AddPoint(POINT point); 라는 Method가 있다면 AddPoint(const POINT &point); 가 나을 것이다. (const는 적절히 써주자) 물론 호출한 놈의 인스턴스가 사라지지 않는 것이 확실히 될 때 얘기다.
vector의 iterator를 사용 중 for(std::vector<CMyData*>::iterator it = vecData.begin() ; it != vecData.end(); it++) (*it)->GetName(); 이런게 있었다. 아무 생각 없이 쓰고보니.. it는 우선은.. 내가 선언한 std::vector<T*>::iterator 클래스의 인스턴스인데.. 여기에 왜 역참조인 *가 붙었지? <이 안에 ..
보통 MFC에서 이제 view에 사용할 소스 파일의 h와 cpp가 있을 때 이제 해당 뷰에서 사용할 컨트롤 및 클래스들을 사용할 때에 include를 cpp 파일에다가 한다. 헤더 파일에 인클루드 했다가는 무진장 꼬여서 애먹는다 -.-;; 차라리 사용할 클래스들을 그때 그때 cpp에 include하는게 편하다. 그렇다면 멤버 변수로 외부 클래스를 선언 할려면 어떻게 해야하는가 class의 헤더에 외부 클래스의 h가 include 되어 있지..
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=829244&ref=829244 나는 분기문을 좀 싫어한다 -.-;; 뭔가 소스가 길어지는 느낌이라서.. 예를 들어 단순히 form열기 같은 것을 하는데 switch문으로 길게 늘리는게 뭔가 안깔끔해 보인다. switch(nIndex) case..
상속한 클래스를 넘겨 줬을 때 해당 클래스의 자료형이 뭔지 정확히 알기 위해 사용한다. 컴파일 시에 RTTI를 사용하여 컴파일 하면 vtable을 사용 할 수 있다. vtable은 가상 함수 테이블인데 아래의 소스를 함 보자. class Parent{ public: virtual void func(Parent obj); }; class Child : public Parent{ public: virt..
dynamic_cast const_cast reinterpret_cast static_cast A가 B의 superclass일 때 A* a; B* b = new B(); a = (A *)b; 이거는 dynamic_cast<A *>(b);와 같음 dynamic_cast는 safe함. 서브->슈퍼 캐스팅은 상관 없지만 슈퍼->서브 캐스팅은, C style로 캐스팅하면 캐스팅이 되긴 하지만, 참조 할 수 없는 멤버..
예를 들어 인자가 한개 달린 생성자만을 갖고 있는CDevice 라는 class가 있다고 했을 때 class CDevice{ public: CDevice(int a); }; 이 CDevice를 다른 클래스에서 멤버 변수로 사용할려면 어찌 해야 할까? 자바의 경우는 걍 class CObject{ public CDevice mDevice = new Device(n); public CObject(){ ..
#include <cstdio> #include <algorithm> using namespace std; int main() { int a[10] = {5,4,2,6,5,3,10,9,13,5}; sort(a,a+10); //여기 for(int i = 0;i < sizeof(a)/sizeof(int);i++) { printf("%d\n",a[i]); } return ..
Vector 사용법 #include <cstdio> #include <vector> using namespace std; int main() { int i; int num =10; vector<int> vi; for(i = 0;i < num;i++) { vi.push_back(i*2); //vi[i] = i*2; } for(i = 0;i < num;i..
virtual은 3가지 정도로 사용됩니다. OOP에 대한 개념이 잡혀있어야 설명을 제대로 이해하실 수 있을텐데.. 최대한 쉽게 설명 해보도록 하죠. 일단 OOP 개념 중 클래스 상속에 대한 것은 잘 아실겁니다. 이마저도 모르신다면 virtual에 대해서는 전혀 궁금해하실 필요가 없으니 그냥 넘어가시면 되구요.. 진도를 앞서나가는 호기심은 해롭습니다! :-) class Bird { &nbs..
::가 붙는 경우 글로발을 의미한다.예를 들어 글로발로 int a가 선언되어 있고 클래스 내에서 int a가 선언되어 있는 경우클래스 내에서 사용하는 a는 클래스 내에서 선언한 a이다.이때 글로발 변수인 a를 사용하고 싶다면 ::a를 사용하면 되겠다.아래는 이해를 돕기 위한 소스#include <iostream>using namespace std;int a = 3;void test(){ &n..
extern을 사용하면 됩니다.extern을 사용하면 '이 변수는 이미 사용되었으니 컴파일 하지 말자'라고 컴파일러가 인식하고 다른 프로젝트내의 동일한 이름을 가진 다른 변수에서 값을 끌어다가 사용합니다.main.h를 사용하는 a.cpp와 b.cpp에서 동일한 전역변수 int t를 사용하고 싶다면main.h에다가 extern int t;를 선언해놓고a.cpp나 b.cpp 둘중 하나에다가 전역변수로 int t;를 선언하면 됩니다. 둘다 선언하면 안돼요..