클래스를 주고 받을땐 레퍼런스를 사용하자!! 클래스 전체를 call by value로 넘긴다면 그 메모리는 어머어머하지만 레퍼런스로 넘기게 되면 겨우 포인터 변수의 크기 만큼만 넘기고 끝이다. 예를 들어서 AddPoint(POINT point); 라는 Method가 있다면 AddPoint(const POINT &point); 가 나을 것이다. (const는 적절히 써주자) 물론 호출한 놈의 인스턴스가 사라지지 않는 것이 확실히 될 때 얘기다.
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=829244&ref=829244 나는 분기문을 좀 싫어한다 -.-;; 뭔가 소스가 길어지는 느낌이라서.. 예를 들어 단순히 form열기 같은 것을 하는데 switch문으로 길게 늘리는게 뭔가 안깔끔해 보인다. switch(nIndex) case: 0 Form1열기 case: 1 Form2열기 case: 2 form3열기 이걸 간결히 해주기 위해 아래처럼 쓸 수 있다. Form arFrom[3]; arForm[0] = Form1; arForm[1] = Form2; arForm[2] = Form3; arForm[nIndex].폼열기 이걸 다른 곳에도 응용해 보면, 입력한 숫자에..
상속한 클래스를 넘겨 줬을 때 해당 클래스의 자료형이 뭔지 정확히 알기 위해 사용한다. 컴파일 시에 RTTI를 사용하여 컴파일 하면 vtable을 사용 할 수 있다. vtable은 가상 함수 테이블인데 아래의 소스를 함 보자. class Parent{ public: virtual void func(Parent obj); }; class Child : public Parent{ public: virtual void func(Parent obj); }; 이런 클래스가 있을 때 Parent p; Child c; p.func(p); p.func(c); 이렇게 하면 함수 func에서는 인자로 들어온 Parent obj에 대하여 이것이 Child인지 Parent 인지 알 길이 없다. 자바에서는 걍 p.getClas..
dynamic_cast const_cast reinterpret_cast static_cast A가 B의 superclass일 때 A* a; B* b = new B(); a = (A *)b; 이거는 dynamic_cast(b);와 같음 dynamic_cast는 safe함. 서브->슈퍼 캐스팅은 상관 없지만 슈퍼->서브 캐스팅은, C style로 캐스팅하면 캐스팅이 되긴 하지만, 참조 할 수 없는 멤버를 참조 하려 하면 런타임 에러가 발생함. dynamic_cast를 이용하면 서브->슈퍼 일때만 캐스팅 하고 아닐 대는 null을 참조함. 따라서 null 체크를 통해 런타임 에러를 방지할 수 있다. 덧, 포인터로 선언한 클래스 일때만 된다. Parent *p1 = new Child; Parent *p2 = ..
예를 들어 인자가 한개 달린 생성자만을 갖고 있는CDevice 라는 class가 있다고 했을 때 class CDevice{ public: CDevice(int a); }; 이 CDevice를 다른 클래스에서 멤버 변수로 사용할려면 어찌 해야 할까? 자바의 경우는 걍 class CObject{ public CDevice mDevice = new Device(n); public CObject(){ } }; 해주면 되겠지만.. C++(/MFC)은 그렇지 않다.. 물론 포인터로 선언해 준다면 저런식으로 해주면 좋겠지만 일반 멤버 변수로 생성자를 가지도록 변수 생성을 할려면 어떻게 해야할까 class CObject{ public: CDevice m_Device; CObject(); } CObject::CObjec..
Vector 사용법 #include #include using namespace std; int main() { int i; int num =10; vector vi; for(i = 0;i < num;i++) { vi.push_back(i*2); //vi[i] = i*2; } for(i = 0;i < num;i++) { printf("vi[%d] = %d\n",i,vi.at(i)); //vi[i]도 됨 } printf("size of vector : %d\n",vi.size()); return 0; } List 사용법 #include #include using namespace std; int main() { list li; int i; for(i = 0;i < 5;i++) { li.push_back(i..
잘은 모르겠지만 이것저것 뒤져보니 꽤 나왔다. 일단 응용프로그램을 여러개로 쪼개서 만든 후 ShellExecute에서 lpOperation값을 runas로 하여 실행하는게 가장 간단한 것 같다. 이 경우 관리자 권한으로 상승 시킬지 요구하는 창이 하나 뜬다고 한다. 그리고 COM ATL을 써서 하는 The COM Elevation Moniker 라는게 있는 것 같다. 링크는 http://msdn.microsoft.com/ko-kr/library/ms679687.aspx http://blogs.msdn.com/b/vistacompatteam/archive/2006/09/28/cocreateinstanceasadmin-or-createelevatedcomobject-sample.aspx 이거고 예제 소스는 ..
- Total
- Today
- Yesterday
- Quiz
- API
- jni
- db
- Python
- NDK
- linux
- source
- 프로그래밍
- gcc
- 안드로이드
- 리눅스
- Cloud
- it
- android
- java
- 음악
- algorithm
- MFC
- winapi
- C
- kering
- C++
- AWS
- driver
- 드라이버
- Visual C++
- database
- Troubleshooting
- jni강좌
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |