C++

    C++ 정적 바인딩과 동적 바인딩의 차이점

    바인딩은 일반적으로 한 항목을 다른 항목에 매핑하는 것을 나타낸다. 컴파일된 언어의 컨텍스트에서 바인딩은 함수 호출과 함수 정의 간의 연결이다. C++에서 함수가 호출되면 프로그램 컨트롤은 해당 함수가 정의된 메모리 주소에 바인딩된다. C++에는 정적(또는 초기) 바인딩과 동적(또는 후기) 바인딩의 두 가지 유형의 바인딩이 있다. 이 게시물은 C++의 정적 바인딩과 동적 바인딩의 차이점에 대한 개요를 제공한다. 정적 바인딩은 컴파일 타임에 발생하고 동적 바인딩은 런타임에 발생한다. 따라서 각각 조기 및 후기 바인딩이라고도 한다. 정적 바인딩에서는 함수 정의와 함수 호출이 컴파일 시간에 연결되지만 동적 바인딩에서는 런타임까지 함수 호출이 해결되지 않으므로 런타임까지 바인딩되지 않는다. 정적 바인딩은 함수를..

    C++ 중괄호 초기화

    특히 비교적 간단한 생성자에 대한 class생성자를 항상 정의할 필요는 없다. 사용자는 다음 예제와 같이 균일한 class 초기화를 사용하여 개체를 초기화하거나 struct 초기화할 수 있다. // no_constructor.cpp // Compile with: cl /EHsc no_constructor.cpp #include // No constructor struct TempData { int StationId; time_t timeSet; double current; double maxTemp; double minTemp; }; // Has a constructor struct TempData2 { TempData2(double minimum, double maximum, double cur, in..

    C++ 동기(synchronous)와 비동기(asynchronous) / 블로킹(blocking)과 논블로킹(non-blocking)

    1. 동기(Synchronous)와 비동기(Asynchronous) 개념 동기는 요청과 그 결과가 동시에 일어난다 비동기는 요청과 그 결과가 동시에 일어나지 않는다 1) 동기의 예 일반적으로 사용하는 함수들은 대부분 동기적 방식이다. C언어의 scanf()와 Java의 Scanner 객체의 next()메서드 같이 사용자의 입력을 받는 함수들이 그 예이다. Scanner sc = new Scanner(System.in); int num = sc.nextInt(); sc.nextInt() 결과 사용자가 입력을 하면, 그 값은 num이라는 변수에 담긴다. 즉, nextInt() 메서드를 호출하고 그 결과를 자신이 직접 처리 했다. 2) 비동기의 예 다음은 JS의 setTimeout() 함수이며, 비동기 방식의..

    [Unreal] C++ 인터페이스 (UInterface)

    생성 방법은 우클릭 후 > New C++ Class > Unreal Interface 언리얼에선 모든 오브젝트들은 인스턴스화가 되어야 되기 때문에 인터페이스가 단순한 가상함수 (순수 가상 함수 X)이다. 원형은 아래와 같다. UWeaponInterface는 그대로 놔둔다, 리플렉션 전용이기에 절대로 지워서는 안된다. 아래에 있는 I로 시작되는 IWeaponInterface에 구현부를 넣는다. 헤더파일 #pragma once #include "CoreMinimal.h" #include "UObject/Interface.h" #include "WeaponInterface.generated.h" // This class does not need to be modified. UINTERFACE(MinimalAP..

    문자열 (소문자 대문자 변환) transform 함수

    algorithm 헤더파일 내에 있다 toupper (대문자), tolower(소문자) 그리고 :: 익명 네임스페이스 무조건 붙여야한다. #include #include #include using namespace std; int main() { string str1, str2; cin >> str1 >> str2; transform(str1.begin(), str1.end(), str1.begin(), ::toupper); transform(str2.begin(), str2.end(), str2.begin(), ::tolower); cout

    C++ stringstream 사용법 (문자열에서 공백 제외 추출, 특정값)

    1) 문자열을 나누는 stringstream C++에서 stringstream은 주어진 문자열에서 필요한 자료형에 맞는 정보를 꺼낼 때 유용하게 사용된다. stringstream에서 공백과 '\n'을 제외하고 문자열에서 맞는 자료형의 정보를 빼낸다. ˙ #include 전처리 헤더를 필수로 포함해야 한다. ˙ stream.str(string str) 은 현재 stream의 값을 문자열 str로 바꾼다. int num; string str = "123 456"; stringstream stream; stream.str(str); while(stream1 >> num ) cout num ) cout

    C++ max_element(), min_element() 최대값, 최소값

    C++에서는 이 기능을 #include 에서 제공한다. max_element()나 min_element()는 둘다 모든 요소에 접근을 해야 하기 때문에, 모든 STL 컨테이너에 대해서 선형으로 동작한다. 즉 시간 복잡도가 O(n)이다. template ForwardIterator max_element (ForwardIterator first, ForwardIterator last); template ForwardIterator max_element (ForwardIterator first, ForwardIterator last, Compare comp); template ForwardIterator min_element (ForwardIterator first, ForwardIterator last); ..

    64bit OS에서 C++과 C# 데이터 차이 비교

    CTS C++ C# Size(byte) System.Byte unsigned char byte 1 System.SByte signed char sbyte 1 System.Int16 short short 2 System.UInt16 unsigned short ushort 2 System.Int32 int int 4 System.Int64 long, long long long 8 System.Single float float 4 System.Char wchar_t char 2 System.Double double double 8 System.UInt64 size_t ulong 8 System.IntPtr void * (pointer) IntPtr 8 출처 : https://dragontory.tistory...

    C++ Copy and Swap idiom

    C++에선 클래스가 리소스를 관리하고 클래스의 생성/소멸에 맞춰 리소스를 할당/해제한다. 관련된 멤버 함수와 그 역할은 아래와 같다. 생성자: 리소스를 할당한다. 복사 생성자: 리소스를 복사해온다. 복사 대입 연산자: 기존 리소스를 해제하고 리소스를 복사해온다. (C++11부터) 이동 생성자: 리소스를 가져온다. (C++11부터) 이동 대입 연산자: 기존 리소스를 해제하고 리소스를 가져온다. 소멸자: 리소스를 해제한다. Copy-and-swap idiom은 간결하면서도 강력한 예외 안정성(strong exception safety)을 보장해주는 복사 대입 연산자를 짤 수 있게 해준다. 또한 이동 대입 연산자에를 짤 때에도 유용하다. 문자열 리소스를 관리하는 간단한 클래스를 생각해보자. class Foo ..

    C++ 위임 생성자 (delegating constructor)

    위임 생성자는 특정 생성자를 호출하기 전 다른 생성자를 먼저 호출하는 것이다. 상속 받을 때처럼 : 기호를 써야한다. member-initializer-list(멤버 초기화 리스트)를 가질 수가 없다. 즉 아래에 mX(X), mY(Y) 에서 다른 생성자 호출이 불가능하다. Parent(int X) : Parent() 여기서는 Parent가 먼저 호출되고 int형 파라미터 들어간 생성자가 호출 된다. 자식 클래스에서 또한 부모 클래스의 생성자를 쓸 수가 있다, 부모 생성자에선 자식 생성자를 대리로 호출하는건 불가능하다. 마찬가지로 부모 클래스의 생성자가 호출 되고 자식 클래스의 생성자가 호출된다. #include #include using namespace std; class Parent { int mX ..