vector의 iterator를 사용 중 for(std::vector::iterator it = vecData.begin() ; it != vecData.end(); it++) (*it)->GetName(); 이런게 있었다. 아무 생각 없이 쓰고보니.. it는 우선은.. 내가 선언한 std::vector::iterator 클래스의 인스턴스인데.. 여기에 왜 역참조인 *가 붙었지? == *it인데.. 아하 그럼 it는 의 포인터겠구나~ 하고 생각했지만.. 포인터가 아니였다..(kering 왈) 마치 포인터 처럼 오버로딩 돼 있었다. 우선 *가 오버로딩 돼있다. const_reference operator*() const 그외에 _Vb_const_iterator& operator++() 등등 vector 헤..
보통 MFC에서 이제 view에 사용할 소스 파일의 h와 cpp가 있을 때 이제 해당 뷰에서 사용할 컨트롤 및 클래스들을 사용할 때에 include를 cpp 파일에다가 한다. 헤더 파일에 인클루드 했다가는 무진장 꼬여서 애먹는다 -.-;; 차라리 사용할 클래스들을 그때 그때 cpp에 include하는게 편하다. 그렇다면 멤버 변수로 외부 클래스를 선언 할려면 어떻게 해야하는가 class의 헤더에 외부 클래스의 h가 include 되어 있지 않기 때문에 그냥 선언해선 되지 않을 것이다 예를 들어 내가 class CMain에서 사용하고 싶은 클래스가 CExample 이라고 해보자. //Main.h class CMain{ public: CExample m_example; }; //Main.cpp #includ..
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..
- Total
- Today
- Yesterday
- Quiz
- MFC
- jni강좌
- Visual C++
- NDK
- it
- database
- android
- 드라이버
- AWS
- Python
- db
- C
- Troubleshooting
- algorithm
- 프로그래밍
- 안드로이드
- API
- kering
- source
- Cloud
- driver
- 음악
- java
- gcc
- linux
- C++
- jni
- winapi
- 리눅스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |