C++

    C++ 명시적 형변환/캐스팅 (explicit)

    명시적 형변환 int intVal = 2; float floatVal = (float)intVal; float floatVal = float(intVal); 아래와 같은 차이가 존재한다. int first = 5; int second = 2; float floatVal = first / second; float floatVal2 = (float) first / second; std::cout

    C++ 상수식 (constexpr)

    constexpr은 const처럼 변수에 적용 할 수 있으며 해당 변수에 대한 변경을 시도하면 컴파일러는 에러를 발생한다. const와는 다르게 생성자에 적용 할 수 있다. constexpr로 지정된 값이나 리턴 값이 상수이며 컴파일 타임에 계산된다. 템플릿 인수 및 배열 선언 같은 const 정수 값이 사용되는 곳에 constexpr 정수 값이 사용 될 수 있다. 컴파일 타임에 값이 계산되면 프로그램 실행 속도가 빨라지며 메모리 사용량이 줄어든다. constexpr 리턴 값 constexpr 함수의 리턴 값이 constexpr 속성을 가지려면 리터럴 타입이어야 한다. const int64_t const_mypow(int64_t itarget, int isquare) { if (isquare

    C++ 클래스 상속 불가 및 함수 오버라이딩 불가 (final)

    최종 키워드를 사용하여 상속할 수 없는 클래스를 지정하거나 파생 클래스에서 재정의할 수 없는 가상 함수를 지정할 수 있다. 다음 예제에서는 최종 키워드를 사용하여 클래스를 상속받을 수 없도록 지정한다. class Parent final { }; class Derived : public Parent { }; 다음 예제에서는 최종 키워드를 사용하여 가상 함수를 오버라이딩 할 수 없도록 지정한다. class Parent { public: virtual void Print() final { } virtual void Print2() { } }; class Derived : public Parent { public: virtual void Print() override { } virtual void Print2(..

    C++ 중첩 클래스 (Nested Class)

    중첩 클래스의 이름은 포함 클래스의 범위에 있으며 중첩 클래스의 멤버 함수에서 이름을 조회하면 중첩 클래스의 범위를 검사 한 후 포함 클래스의 범위를 방문한다. 둘러싸는 클래스의 다른 멤버와 마찬가지로 중첩 클래스는 둘러싸는 클래스가 액세스하는 모든 이름 (개인, 보호 등)에 액세스 할 수 있지만 그렇지 않으면 독립적이며 둘러싸는 클래스 this 포인터에 대한 특별한 액세스는 없다 . 중첩 클래스의 선언은 둘러싸는 클래스의 형식 이름, 정적 멤버 및 열거 자만 사용할 수 있다. (C ++ 11까지) 중첩 클래스의 선언 은 비 정적 멤버에 대한 일반적인 사용 규칙 에 따라 둘러싸는 클래스의 모든 멤버를 사용할 수 있다 . (C ++ 11부터) int x,y; // globals class enclose {..

    C++ 친구 클래스 및 함수 (friend)

    friend 클래스는 friend로 선언된 다른 클래스의 private 및 protected 멤버에 접근할 수 있다. 사용법은 friend 키워드를 사용하여 클래스나 함수를 명시 해 주는 것이다. 함수 같은 경우에는 전역함수랑 동일해진다, static 클래스 종속 함수랑은 별개. #include #include #include using namespace std; class A { friend class B; int mVal = 0; protected: void ProtectedFunc() { cout

    C/C++ 연산자(Operator) 정리표 (비트, 논리, 산술 +=&^<<>>%~!)

    논리 연산자(Logical operator) 연산자(Operator) 의미(Description) 예제(Example) && 모두 같으면 true를 return (a-3) && b || 하나만 true 면 true를 return a >3 || b > 오른쪽으로 비트 이동, 빈 곳은 0 x>>5

    C++ POD, 표준 레이아웃 타입, 간단한 타입

    POD (Plain Old Data) 메모리 상에서 연속적인 바이트 열이다. 다형성이나 유저가 정의한 복사 의미론 등과 같은 진보된 의미론 문법이 필요없을 때 개체를 POD로 취급해야 할 때가 있다. 왜냐하면, POD로 취급하면 하드웨어에서 좀 더 효율적으로 개체를 옮기거나 복사할 수 있기 때문이다. POD 개체는 다음 조건을 갖춰야 한다. 표준 레이아웃 타입(standard layout type)이어야 한다. 간단한 타입(trivial type)이어야 한다. POD가 될 수 있는 조건 복잡한 레이아웃을 갖지 않는다.(가상 함수 등) 유저가 정의한 복사 의미론을 갖지 않는다. 간단한 기본 생성자를 갖고 있다. 의 std::is_pod를 이용하면 쉽게 알 수 있다. 표준 레이아웃 타입 C와 분명하게 같은 ..

    C++ namespace와 using

    공동 작업 하다보면 네임스페이스로 나눠야 할 경우가 많다. namespace 네임스페이스 네임스페이스는 내부 식별자(형식, 함수, 변수 등의 이름)에 범위를 제공하는 선언적 영역이다. 네임스페이스는 코드를 논리 그룹으로 구성하고 특히 코드베이스에 여러 라이브러리가 포함된 경우 발생할 수 있는 이름 충돌을 방지하는 데 사용된다. 네임스페이스 범위에 있는 모든 식별자는 한정 없이 서로에게 표시된다. 네임스페이스 외부의 식별자는 각 식별자에 대해 정규화된 이름을 사용하거나, std::vector vec;단일 식별자에 대한 using Declaration(또는 네임스페이스using namespace std;(using std::string)의 모든 식별자에 대한 using 지시문을 사용하여 멤버에 액세스할 수 ..

    [실1] 1932 - 정수 삼각형

    #include #include using namespace std; int arr[501][501]{ 0 }; int dp[501][501]{ 0 }; int main() { int n; cin >> n; for (int i = 1; i arr[i][j]; dp[1][1] = arr[1][1]; for (int i = 2; i

    [실3] 15650 - n과 m(2)

    #include #include using namespace std; #define MAX 9 int n, m; int arr[MAX]{ 0 }; bool visited[MAX]{ 0 }; void dfs(int num, int depth) { if (depth == m) { for (int i = 0; i < m; i++) cout m; dfs(1, 0); }