💻 Programming (프로그래밍)/C++
-
Q) new와 malloc() delete와 free()는 어떤 기능을 가지고 있을까요? A) 동적 메모리 할당을 할 때 사용하는 기능으로 new와 malloc()은 사용할 메모리를 할당 해줄때, delete와 free()는 메모리를 다시 회수할 때 사용합니다. Q) 그럼 new-delete 와 malloc()-free()의 차이점은 무엇일까요 A) new-delete는 연산자(operator)이고, malloc()-free()는 함수(function) 입니다. new는 메모리의 데이터 형 혹은 객체를 넘겨주면 되는 반면 malloc는 메모리의 크기를 넘겨줘야합니다. 더 나아가 new와 delete는 클래스 생성시, 각각 생성자와 소멸자가 호출 됩니다. ++ 추가적으로 ++ 동적할당은 Heap 영역의 공..
[C++] new, delete와 malloc(), free()의 차이는?Q) new와 malloc() delete와 free()는 어떤 기능을 가지고 있을까요? A) 동적 메모리 할당을 할 때 사용하는 기능으로 new와 malloc()은 사용할 메모리를 할당 해줄때, delete와 free()는 메모리를 다시 회수할 때 사용합니다. Q) 그럼 new-delete 와 malloc()-free()의 차이점은 무엇일까요 A) new-delete는 연산자(operator)이고, malloc()-free()는 함수(function) 입니다. new는 메모리의 데이터 형 혹은 객체를 넘겨주면 되는 반면 malloc는 메모리의 크기를 넘겨줘야합니다. 더 나아가 new와 delete는 클래스 생성시, 각각 생성자와 소멸자가 호출 됩니다. ++ 추가적으로 ++ 동적할당은 Heap 영역의 공..
2022.04.07 -
Q) 리틀 엔디안과 빅엔디안은 무엇일까요 A) 데이터 저장 방식입니다 즉 byte order, 1바이트별 저장 순서를 정해줍니다. 빅 엔디안 (Big-Endian) 시작주소에 상위바이트부터 기록합니다. 리틀 엔디안 (Little-Endian) 시작주소에 하위 바이트부터 기록합니다. #include using namespace std; int main() { int n = 0x12345678; char* ptr = (char*)&n; printf("0x%x\n", *ptr); printf("0x%x\n", *(ptr+1)); printf("0x%x\n", *(ptr+2)); printf("0x%x\n", *(ptr+3)); } 현재 저는 리틀엔디안 방식으로 끝에서부터 데이터가 저장됩니다.
[C++] 리틀 엔디안, 빅 엔디안Q) 리틀 엔디안과 빅엔디안은 무엇일까요 A) 데이터 저장 방식입니다 즉 byte order, 1바이트별 저장 순서를 정해줍니다. 빅 엔디안 (Big-Endian) 시작주소에 상위바이트부터 기록합니다. 리틀 엔디안 (Little-Endian) 시작주소에 하위 바이트부터 기록합니다. #include using namespace std; int main() { int n = 0x12345678; char* ptr = (char*)&n; printf("0x%x\n", *ptr); printf("0x%x\n", *(ptr+1)); printf("0x%x\n", *(ptr+2)); printf("0x%x\n", *(ptr+3)); } 현재 저는 리틀엔디안 방식으로 끝에서부터 데이터가 저장됩니다.
2022.04.06 -
Q) cin, cout 최적화 방법은? ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); Q) 위의 방법이 단순히 최적화 시켜주는 구문일까요? A) 대답은 NO!! 제대로 알고 씁시다. Q) 그렇다면 위의 코드의 작동원리는? ios::sync_with_stdio(false); C++ 컴파일러는, c스타일의 입출력까지 기본값으로 혼용하여 사용합니다. 위의 구문은, c스타일의 입출력의 synchronization을 false하겠다는 의미로, 동기화를 꺼줘서 독립된 자신만의 버퍼를 갖습니다. 따라서 속도가 빨라지는 것이죠. 하지만 쓰레드 사용 시 여러쓰레드가 동시에 입출력에 접근하는 경우가 생겨, 불안정한 결과를 초래할 수 있습니다! Q) cin.tie..
[C++] cin, cout 최적화Q) cin, cout 최적화 방법은? ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); Q) 위의 방법이 단순히 최적화 시켜주는 구문일까요? A) 대답은 NO!! 제대로 알고 씁시다. Q) 그렇다면 위의 코드의 작동원리는? ios::sync_with_stdio(false); C++ 컴파일러는, c스타일의 입출력까지 기본값으로 혼용하여 사용합니다. 위의 구문은, c스타일의 입출력의 synchronization을 false하겠다는 의미로, 동기화를 꺼줘서 독립된 자신만의 버퍼를 갖습니다. 따라서 속도가 빨라지는 것이죠. 하지만 쓰레드 사용 시 여러쓰레드가 동시에 입출력에 접근하는 경우가 생겨, 불안정한 결과를 초래할 수 있습니다! Q) cin.tie..
2022.04.04 -
우리가 흔히 쓰는 if문 조건문으로 if(Expression) {} Expression의 값이 참이 되면 조건문 구문이 실행됩니다. Q) 조건문 속 조건식은 어떻게 해야 돌아가나요? A) 0을 제외한 모든 것이 if구문을 작동하게 만들어줍니다. 그 외에 실행할만한 예시로는 아래가 있습니다. // if문에 0이외에 것은 모두 다 실행됩니다. if(1) { cout
[C++] if문이 작동하기 위한 조건은 어떻게 돌아갈까?우리가 흔히 쓰는 if문 조건문으로 if(Expression) {} Expression의 값이 참이 되면 조건문 구문이 실행됩니다. Q) 조건문 속 조건식은 어떻게 해야 돌아가나요? A) 0을 제외한 모든 것이 if구문을 작동하게 만들어줍니다. 그 외에 실행할만한 예시로는 아래가 있습니다. // if문에 0이외에 것은 모두 다 실행됩니다. if(1) { cout
2022.04.03 -
RTTI(Run Time Type Information) JAVA나 C# 에서는 Reflection이라 불립니다. 프로그램 실행 중 타입의 정보를 얻어 올때 사용하는 방법입니다. typeid (간단예시) int n = 10; const std::type_info& t = typeid(n); std::cout
[C++] RTTI(Run Time Type Information) 이란?RTTI(Run Time Type Information) JAVA나 C# 에서는 Reflection이라 불립니다. 프로그램 실행 중 타입의 정보를 얻어 올때 사용하는 방법입니다. typeid (간단예시) int n = 10; const std::type_info& t = typeid(n); std::cout
2022.04.01 -
업캐스팅 부모 클래스를 통해 자식 클래스를 다루는 행위 #include using namespace std; class Animal { public: virtual void cry() { cout cry(어! virtual 함수네) -> 해당 객채 d의 vptr을 통해 Dog->Cry() 실행 가상(virtua) 함수가 있는 클래스는 객체당 가상함수 테이블을 가르키는 vptr용 포인터 4 or 8 바이트가 추가됩니다. 클래스당 1개의 가상함수 table이 있고, 가상함수 갯수 * 4 또는 8 * 상속깊이가 되버리죠 다운캐스팅 부모 클래스의 포인터를 자식 클래스의 포인터로 바꾸는 것 #include using namespace std; class Animal { public: void cry() { cout
[C++] 업캐스팅(Up Casting), 다운캐스팅(Down Casting) 이란?업캐스팅 부모 클래스를 통해 자식 클래스를 다루는 행위 #include using namespace std; class Animal { public: virtual void cry() { cout cry(어! virtual 함수네) -> 해당 객채 d의 vptr을 통해 Dog->Cry() 실행 가상(virtua) 함수가 있는 클래스는 객체당 가상함수 테이블을 가르키는 vptr용 포인터 4 or 8 바이트가 추가됩니다. 클래스당 1개의 가상함수 table이 있고, 가상함수 갯수 * 4 또는 8 * 상속깊이가 되버리죠 다운캐스팅 부모 클래스의 포인터를 자식 클래스의 포인터로 바꾸는 것 #include using namespace std; class Animal { public: void cry() { cout
2022.04.01 -
Q) 묵시적 형 변환, 명시적 형 변환은 무엇인가요? int i = 65; char ch1 = 65; // print : A char ch1 = i; // 묵시적 형 변환(Implicit Cast) char ch2 = (char)i; // 암시적 형 변환(Explicit Cast) 우선 형 변환은 변수의 타입(Type)을 다른 타입으로 바꾸는 행위입니다. // 타입 캐스팅 묵시적 형 변환 = 타입을 언급없이 암시적 형 변환 = 타입을 언급을 하여 형 변환을 합니다. 이때 형 변환시 타입 체크를 하지 않아서 버그를 만들기가 쉽습니다. 따라서 c++에서의 타입 캐스팅은 일종의 안정 장치를 걸 수 있는데요. Q) 타입캐스팅 안정성을 위한 장치는 어떤게 있을까요? A) static_cast, const_cast..
[C++] 형 변환, 타입 캐스팅 (Type casting)Q) 묵시적 형 변환, 명시적 형 변환은 무엇인가요? int i = 65; char ch1 = 65; // print : A char ch1 = i; // 묵시적 형 변환(Implicit Cast) char ch2 = (char)i; // 암시적 형 변환(Explicit Cast) 우선 형 변환은 변수의 타입(Type)을 다른 타입으로 바꾸는 행위입니다. // 타입 캐스팅 묵시적 형 변환 = 타입을 언급없이 암시적 형 변환 = 타입을 언급을 하여 형 변환을 합니다. 이때 형 변환시 타입 체크를 하지 않아서 버그를 만들기가 쉽습니다. 따라서 c++에서의 타입 캐스팅은 일종의 안정 장치를 걸 수 있는데요. Q) 타입캐스팅 안정성을 위한 장치는 어떤게 있을까요? A) static_cast, const_cast..
2022.04.01 -
Q) 변수들은 어떻게 작동하나요 예를 들어 int count = 5 프로그램 일때 Q) 변수들은 어떤 종류가 있나요 Bool : 참 , 거짓 Character : 문자 Integer : 정수 Floating-point : 실수 * 추가적으로 ASCII 코드에 따라 char 값과 dec(10진수), Binary(2진수), Octal(8진수), Hexadecimal(16진수)는 상응합니다. 일 경우, A a 이렇게 출력됩니다. 저기서 타입캐스트를 처음 사용해봤는데요 굳이 저렇게 안하고 (char)(c+32)해도 알아서 타입을 바꿔줍니다 다른 시간에 타입캐스트에 대해선 더 자세히 다루도록하겠습니다.
[C++] 변수들의 타입Q) 변수들은 어떻게 작동하나요 예를 들어 int count = 5 프로그램 일때 Q) 변수들은 어떤 종류가 있나요 Bool : 참 , 거짓 Character : 문자 Integer : 정수 Floating-point : 실수 * 추가적으로 ASCII 코드에 따라 char 값과 dec(10진수), Binary(2진수), Octal(8진수), Hexadecimal(16진수)는 상응합니다. 일 경우, A a 이렇게 출력됩니다. 저기서 타입캐스트를 처음 사용해봤는데요 굳이 저렇게 안하고 (char)(c+32)해도 알아서 타입을 바꿔줍니다 다른 시간에 타입캐스트에 대해선 더 자세히 다루도록하겠습니다.
2022.03.31