검색결과 리스트
쓰발이의 World에 해당되는 글 363건
- 2015.01.07 static_cast 와 dynamic_cast
- 2015.01.07 warning 에 대하여
- 2014.04.15 typeid 키워드
- 2014.03.03 Unique Pointer
- 2012.01.14 [안드로이드] layout xml - layout_height/weigh 1
- 2011.12.31 [안드로이드] Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties.
- 2011.12.29 AVD 실행 문제
- 2011.04.12 VIA 랜카드 드라이버 다운로드 사이트
- 2011.02.25 단축키
- 2011.02.25 [C#] Drag & Drop
글
static_cast 와 dynamic_cast
static_cast
: 컴파일러에게, 모든 형 변환에 대해 허용하도록 해주는 구문. 이 형변환에 대한 모든 책임은 프로그래머가 진다.
Car* pCar = new Truck();
Truck* pTruck = static_cast<Truck*>pCar;
pTruck->drive();
정상동작.
Car* pCar = new Car();
Truck* pTruck = static_cast<Truck*>pCar;
pTruck->drive();
비정상동작.
: 따라서, 정말 필요한 경우에만 제한적으로 사용하는 것이 좋다.
: 부모 포인터를 자식 포인터로 변환할때, 의도적으로 한다는 것을 표현할때 좋다.
dynamic_cast
: 상속관계에서의 안전한 형 변환
: 자식 객체의 포인터 및 참조형 변수를 부모형 포인터 및 참조형 변수로 형 변환 해주는데 사용 된다.
Car* pCar = new Truck();
Truck* pTruck = dynamic_cast<Truck*>pCar;
컴파일 에러
Car* pCar = new Car();
Truck* pTruck = dynamic_cast<Truck*>pCar;
컴파일 에러
Car* pTruck = new Truck();
Car* pCar = dynamic_cast<Truck*>pTruck;
컴파일 성공
'Programming > C++ Language' 카테고리의 다른 글
warning 에 대하여 (0) | 2015.01.07 |
---|---|
typeid 키워드 (0) | 2014.04.15 |
Unique Pointer (0) | 2014.03.03 |
[C++] 동적바인딩( Dynamic binding ) (0) | 2011.01.03 |
[C++] this 포인터 사용하기 (0) | 2010.07.31 |
글
warning 에 대하여
1. field 'A' will
be initialized after field 'B' [ -Wreorder ]
A가 B 다음에 초기화 될 거라는 경고 이다.Class 의 변수는 생성자에 나열된 순서대로 초기화 되는 것이 아니라, Class 에 선언된 순서대로 초기화가 된다. 따라서 A 와 B 가 다른 변수에 의존적으로 초기화가 될 경우, 의도치 않은 값으로 초기화가 되는 것을 방지하기 위한 경고이다.
Class TestClass{ int A; int B; }
TestClass() : B(n++), A(n++)
위와 같은 코드에서 n이 10일 경우, B에 10, A에 11이 들어가도록 의도적으로 개발을 했다고 할 경우
실제 결과는 A가 10이고 B가 11이 된다.
2. Suppressing warning
switch case 를 사용할 때, 의도적으로 break 를 빼는 경우가 있는데
이때 컴파일러에서 no break at the end of case 라는 경고를 보여준다.
이를 없애기 위해서는 eclipse 에서는 해당 경고에 마우스 오른쪽을 누르면 "Customize Problem..." 이라는 메뉴가 있다.
여기에 보면 Comment text to suppress the problem 이라는 란이 있는데,
여기에 있는 텍스트가 해당 경고가 표시되는 부분에 주석으로 포함되어 있으면 해당 경고가 사라지게 된다.
switch(value){
case 1:
...
// no break
case 2:
break;
}
'Programming > C++ Language' 카테고리의 다른 글
static_cast 와 dynamic_cast (0) | 2015.01.07 |
---|---|
typeid 키워드 (0) | 2014.04.15 |
Unique Pointer (0) | 2014.03.03 |
[C++] 동적바인딩( Dynamic binding ) (0) | 2011.01.03 |
[C++] this 포인터 사용하기 (0) | 2010.07.31 |
글
typeid 키워드
typeid 키워드는 런타임에 오브젝트의 클래스를 결정하기 위해 사용 된다. std::type_info 오브젝트를 리턴한다.( 프로그램 종료까지 유지 되는 값 ) 단순히 class 정보만이 필요할 경우에, dynamic_cast<class_type> 보다는 typeid 를 사용하는 것을 선호한다.( typeid 의 수행속도가 짧음 )
#include <iostream> // cout #include <typeinfo> //for 'typeid' class Person { public: // ... Person members ... virtual ~Person() {} }; class Employee : public Person { // ... Employee members ... }; int main() { Person person; Employee employee; Person* ptr = &employee; Person& ref = employee; // The string returned by typeid::name is implementation-defined std::cout << typeid(person).name() << std::endl; // Person (statically known at compile-time) std::cout << typeid(employee).name() << std::endl; // Employee (statically known at compile-time) std::cout << typeid(ptr).name() << std::endl; // Person* (statically known at compile-time) std::cout << typeid(*ptr).name() << std::endl; // Employee (looked up dynamically at run-time // because it is the dereference of a // pointer to a polymorphic class) std::cout << typeid(ref).name() << std::endl; // Employee (references can also be polymorphic) Person* p = nullptr; try { typeid(*p); // not undefined behavior; throws std::bad_typeid // *p, *(p), *((p)), etc. all behave identically } catch (...) {} Person& pRef = *p; // Undefined behavior: dereferencing null typeid(pRef); // does not meet requirements to throw std::bad_typeid // because the expression for typeid is not the result // of applying the unary * operator }
Output (exact output varies by system):
Person Employee Person* Employee Employee
출처 : http://en.wikipedia.org/wiki/Typeid
'Programming > C++ Language' 카테고리의 다른 글
static_cast 와 dynamic_cast (0) | 2015.01.07 |
---|---|
warning 에 대하여 (0) | 2015.01.07 |
Unique Pointer (0) | 2014.03.03 |
[C++] 동적바인딩( Dynamic binding ) (0) | 2011.01.03 |
[C++] this 포인터 사용하기 (0) | 2010.07.31 |
글
Unique Pointer
킈
Related
template <class T>
class rv
{
T& r_;
public:
explicit rv(T& r) : r_(r) {}
T* operator->() {return &r_;}
T& operator*() {return r_;}
};
template
rv<int> intRV; 와 같이 <> 안에 자료형을 넣어 T를 해당 자료형으로 변환 시켜준다.
explicit
class 생성자의 묵시적 호출을 방지하는 키워드.
int a;
rv<int> classRV = a;
위와 같이 호출을 하였을 때, 컴파일러가 암묵적으로 classRV(a) 를 호출해주는 것을 방지한다. 이로인해 의도치 않은 동작을 방지 할 수 있다.
생성자를 호출하기 위해서는 반듯이 rv<int> classRV(a) 와 같이 호출이 되어야 한다.
typename
typedef typename add_reference<deleter_type>::type deleter_reference;
typedef 는 기존 정의된 자료형을 사용자 정의 자료형으로 이름을 부여할 때 사용한다.
따라소 자료형 만이 다음에 올 수가 있는데, 위의 코드에서는 add_reference<deleter_type>::type 이 있는데 이는 변수가 될 수도 있고 자료형이 될 수도 있다. 따라서 컴파일러에게 혼돈을 주게되므로, 컴파일러에게 ~::type 은 자료형이라는 것을 알려주기 위해 사용하는 키워드이다.
'Programming > C++ Language' 카테고리의 다른 글
warning 에 대하여 (0) | 2015.01.07 |
---|---|
typeid 키워드 (0) | 2014.04.15 |
[C++] 동적바인딩( Dynamic binding ) (0) | 2011.01.03 |
[C++] this 포인터 사용하기 (0) | 2010.07.31 |
[C++] 참조 변수 (1) | 2010.07.31 |
글
[안드로이드] layout xml - layout_height/weigh
public static final int FILL_PARENT
API Level 8 부터 더 이상 쓰지 않는다고 한다. Level8 부터는 fill_parent 대신에 match_parent 를 사용한다.
public static final int MATCH_PARENT
부모 view의 크기를 의미하며, 부모의 padding 만큼 사이즈가 줄인다. API Level 8 부터 사용이 가능하다.
public static final int WRAP_CONTENT
내부 content 크기 만큼에 맞춰 사이즈를 정의하게 된다.
TextView를 예를 들면, 한줄의 텍스트가 들어가게 되면 한줄 텍스트의 사이즈 만큼 크기가 결정되고, 두줄의 텍스트가 들어가게 되면 두줄 텍스트의 사이즈만큼 크기가 결정된다.
'Programming > Android' 카테고리의 다른 글
[안드로이드] Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties. (0) | 2011.12.31 |
---|---|
AVD 실행 문제 (0) | 2011.12.29 |
글
[안드로이드] Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties.
해결방법은 아래와 같습니다.
프로젝트에 마우스 오른쪽을 누르고 Android Tools > Fix Project Properties 를 선택하고, 다시 실행하면 됩니다.
'Programming > Android' 카테고리의 다른 글
[안드로이드] layout xml - layout_height/weigh (1) | 2012.01.14 |
---|---|
AVD 실행 문제 (0) | 2011.12.29 |
글
AVD 실행 문제
"[2011-12-29 12:44:06 - Emulator] PANIC: Could not open AVD config file: C:\Users\諛뺤쭊��.android\avd\MyAVD.avd/config.ini"
사용자의 이름이 한글로 되어 있어 발생하는 문제이다.
AVD를 "MyAVD" 로 만들어놓았는데, 이 설정 파일을 C:\로 옮기도록 한다.
나 같은 경우 "C:\Users\사용자이름\.android\avd" 경로에 MyAvd 라는 폴더가 있다.
이 폴더를 C:\ 로 옮기고, cmd를 실행하여 AVD 설치 경로인 이 경로로 이동을 한다. "C:\Program Files\Android\android-sdk\tools"
그리고 난 뒤에 "android move avd -n MyAVD -p C:\MyAVD" 이렇게 명령을 입력하면
AVD 'MyAVD' moved. 라는 메시지와 함께 경로가 C:\MyAVD 로 옮겨진것을 알수 있다.
이제 AVD를 Launch 하게 되면 정상적으로 실행될 것이다.
'Programming > Android' 카테고리의 다른 글
글
VIA 랜카드 드라이버 다운로드 사이트
'Computer' 카테고리의 다른 글
[Window 7] Office 프로그램( 파워포인트, 엑셀 ) 여러 창에서 실행 (3) | 2010.09.27 |
---|---|
윈도우 7 정품 인증 (0) | 2010.07.25 |
컴퓨터 최적화 레지스트리 (0) | 2010.06.16 |
XP 서비스팩 3 다운 받는 곳 (0) | 2010.01.21 |
Microsoft Office Outlook을 시작할 수 없습니다. Outlook 창을 열 수 없습니다. (1) | 2009.12.02 |
글
단축키
: 해당 파일에서 사용하는 함수목록 보여줌
Ctrl + Tab
: A.h / A.cpp 간 이동
Ctrl + Shift + E
: 현재 열려 있는 전체 파일 리스트를 보여줌
Ctrl + E
: 현재 탭에 열려 있는 파일 리스트를 보여줌
Ctrl + J
: 창을 열지 않고, 파일 검색.( eclipse 아래에 검색어가 표시 됨 )
Ctrl + H
: 전체 검색
Ctrl + F
: 검색창 띄우기
Ctrl + K
: 이미 한번 찾은 상태에서, 다음 찾기
Ctrl + Shift + K
: 이미 한번 찾은 상태에서, 이전 찾기
F3
: 해당 메서드나 클래스가 정의 된 곳으로 이동
Ctrl + Shift + ↑ / + ↓
: 이전 / 다음 메서드로 이동
'Programming > C# Language' 카테고리의 다른 글
[C#] Drag & Drop (0) | 2011.02.25 |
---|
글
[C#] Drag & Drop
DragEnter event
- 마우스가 Control 위로 올라 갔을 경우, 마우스 아이콘 모양
- Control의 Drop된 파일/폴더의 전체경로 및 파일/폴더 명 얻기.
path.Substring(path.LastIndexOf('\\') + 1 );
'Programming > C# Language' 카테고리의 다른 글
단축키 (0) | 2011.02.25 |
---|