코딩 모닥불
  • 메뉴 닫기
  • 글작성
  • 방명록
  • 환경설정
    • 분류 전체보기
      • C++
      • 표준 라이브러리
      • 백준(BOJ)
  • 홈
  • 태그
  • 방명록
C++

[C++] 가상 함수를 호출하기 위한 동적 바인딩( dynamic binding )

동적 바인딩( dynamic binding )이 필요한 이유함수명과 함수를 이루는 코드가 있는 메모리 주소를 매칭시키는 것을 함수 바인딩( binding )이라고 합니다. 이 바인딩을 통해서, 함수를 호출하면, 이 함수를 이루는 코드가 있는 주소로 실행 제어( execution control )가 이동해서, 함수를 실행하게 되는 것입니다.이런 함수 바인딩은 컴파일 시에 이루어지기 때문에, 정적(static) 바인딩이라고 합니다. 그리고, 일반 함수와 클래스의 일반 멤버 함수는 이 정적 바인딩을 거칩니다. 그럼, 가상 함수( virtual function )도 정적 바인딩을 할 수 있을까요? [C++] 다형성을 구현하기 위한 가상 함수( virtual function )가상 함수( virtual funct..

2025. 4. 9.
C++

[C++] 다형성을 구현하기 위한 가상 함수( virtual function )

가상 함수( virtual function )가상 함수( virtual function )는 기본( base ) 클래스에서 virtual 키워드를 사용하여 선언되고, 파생 클래스에서 재정의( overriding )되는 멤버 함수를 말합니다. 이러한 가상 함수가, 파생 클래스에서 재정의 되는, 일반 멤버 함수와 다른 점은, 파생 클래스가 기본( base ) 클래스 타입의 포인터나 참조를 통해 접근될 때, 가상 함수를 호출함으로써, 기본 클래스의 함수가 아닌 파생 클래스 버전의 함수를 사용할 수 있다는 점에 있습니다. 코드를 보는 것이 이해하는데 더 도움이 될 것입니다.#include using namespace std;class CBase{ // 기본 클래스public: virtual void VFu..

2025. 4. 7.
C++

[C++] 추상 클래스( abstract class )와 순수 가상 소멸자

추상 클래스와 순수 가상 함수( pure virtual function )복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 추상화라고 합니다.C++에서는 주로 클래스를 통해서 이런 추상화를 하게 됩니다. 다음은 형태( shape )의 개념을 추상화한 클래스 CShape를 보여줍니다.class CShape{ // 형태를 추상화한 클래스public: virtual std::string_view GetName(){ return "Undefined"; } virtual float GetArea(){ return -1; }};이 클래스는 형태의 수많은 속성 중에서, 이름과 넓이를 프로그램에서 사용할 중요한 속성으로 생각해서 가..

2025. 4. 7.
C++

[C++] 예외 클래스( exception class )

예외 클래스( exception class )throw는 예외를 발생시키기 위해서 어떠한 타입의 값이라도 사용할 수 있고, 이런 타입의 종류에는 당연히 클래스도 포함됩니다. [C++] 예외 처리를 위한 throw와 try-catch의 동작 방식C++에서의 예외( exception ) 처리C++에서는 프로그램의 오류나 기대하지 못했던 상황이 발생한 경우, 이를 처리하기 위한 예외( exception )를 발생시키면, 프로그램이 자동으로, 이 예외를 처리할 수codingbonfire.tistory.com예외를 발생시킬 때 사용되는 클래스를 예외 클래스( exceptin class )라고 부르는데, 사실 이 예외 클래스와 일반 클래스의 차이점은 전혀 없습니다.단지, 예외가 발생된 이유를 설명하기 위한 값과 함..

2025. 4. 4.
C++

[C++] 예외가 발생되지 않는 함수를 선언하는 noexcept

noexcept 지시자( specifier )noexcept는 함수 이름의 끝에 붙는 지시자로, 이 지시자가 붙은 함수는 예외( exception )를 발생시키지 않는다는 것을 명시합니다. 하지만, noexcept 함수 실행 시, 컴파일러에 의해 예외가 발생하는 것이 방지되거나 해서, 프로그램이 예외로부터 안전해지는 것을 말하는 것이 아니라, 이 함수에서는 예외가 발생하지 않으니까, 예외에 민감한 문맥에서도 안심하고 사용할 수 있을 뿐만 아니라, 컴파일러는 이 함수를 최적화해서 성능을 향상할 수 있다고 얘기를 하는 것입니다. 즉, 이 noexcept 지시자를 사용한다는 것은, 함수와 이 함수를 사용한 프로그램 간의 일종의 계약이라고 봐야 합니다. 그런데 만약, 이렇게 말해온 함수에서 예외가 외부로 발생하..

2025. 4. 3.
C++

[C++] 생성자와 소멸자에서의 예외( exception ) 처리

생성자( constructor )에서의 예외 처리생성자를 작성하다 보면, 의외로 문제가 발생할 여지가 꽤 있다는 것을 깨닫게 됩니다. 맨 먼저 떠오르는 경우는, 메모리를 대규모로 할당할 때, 실패하는 경우를 들 수 있습니다. 또 다른 경우로는, 클래스 객체가 지속적으로 사용하게 될 변수의 값을 채워 넣기 위해, 생성자에서 호출하는 계산 함수의 오류를 들 수 있습니다.하지만, 이런 문제들은 다른 곳에서도 얼마든지 일어날 수 있는 경우들입니다. 그러나, 일반 함수와 달리, 생성자는 성공 여부를 반환할 수 없기 때문에, 이런 경우를 자연스럽게 처리할 수 없습니다. 그래서 이를 우회하는 방식으로, 실패했다는 정보를 객체 안에 저장해 두거나, 객체를 사용 전 검산을 통해서 제대로 된 결과를 갖고 있다는 것을 확인..

2025. 4. 2.
C++

[C++] 예외 처리를 위한 throw와 try-catch의 동작 방식

C++에서의 예외( exception ) 처리C++에서는 프로그램의 오류나 기대하지 못했던 상황이 발생한 경우, 이를 처리하기 위한 예외( exception )를 발생시키면, 프로그램이 자동으로, 이 예외를 처리할 수 있는 코드를 찾아 문제를 해결하는 메커니즘을 제공합니다. 이 메커니즘을 위해 만든 것이 throw와 try, catch 키워드입니다. 이 키워드들을 이용해서 문제를 처리하는 과정은 다음과 같습니다. ● 먼저, 프로그램 실행 중, 기대하지 못한 상황이 발생되면, throw 키워드를 사용해서 프로그램에게 예외가 발생되었음을 알리게 됩니다. 이 throw 키워드 바로 뒤에는, 발생한 상황을 알리는 데 도움이 되는 데이터가 따라옵니다. 이러한 데이터에는 어떤 종류의 데이터도 상관이 없습니다. 일반..

2025. 4. 1.
C++

[C++] 불필요한 중간 단계를 건너뛰기 위한 복사 생략( copy elision )

불필요한 생성자의 호출클래스의 객체를 생성하고 초기화하기 위해, 컴파일러는 이 클래스의 생성자를 호출합니다. 다음은 CSomething 클래스의 객체가 생성될 때, 어떤 생성자가 호출되는지를 보여줍니다.class CSomething{ int m_nValue;public: CSomething() : m_nValue(0) { cout ▼출력parameterized constructor called.copy constructor called.위의 st 객체는 값 10으로 초기화되는데, 이때 매개 변수 생성자( parameterized constructor )가 호출됩니다.그리고, 이 st 객체로부터 obj 객체를 초기화할 때, CSomething 클래스의 복사 생성자( copy cons..

2025. 3. 31.
C++

[C++] 기존의 객체를 복사할 때 호출되는 복사 생성자( copy constructor )

복사 생성자( copy constructor )복사 생성자( copy constructor )란 같은 타입의 객체를 인자로 받아 그 객체의 데이터를 가지고 초기화를 수행하는 생성자를 말합니다. 다음은 CSomething 클래스의 복사 생성자가 호출되는 예를 보여줍니다.class CSomething{ int m_nValue;public: CSomething() : m_nValue(0) { cout 위에서 CSomething 타입의 other 객체로부터, 같은 타입의 obj 객체를 초기화할 때, 호출되는 생성자를 복사 생성자라고 하며, 이 생성자는 다음과 같은 형태로 정의됩니다.CSomething( const CSomething& other ){ // do something...}여기..

2025. 3. 30.
표준 라이브러리

[C++] 독점적으로 자원을 관리하는 std::unique_ptr 객체

std::unique_ptrstd::unique_ptr은, C++ 11에, 할당된 메모리를 편리하게 관리할 목적으로 도입된 스마트 포인터( smart pointer ) 클래스입니다. 이 unique_ptr 객체가 하는 일은, 메모리가 할당된 객체의 주소를 보관했다가, 이 스마트 포인터가 파괴될 때, 이 주소를 사용해서, 할당된 객체를 파괴하고, 이때 사용되었던 메모리를 시스템에 반환하는 것입니다. 이 클래스를 사용하기 위해선 먼저 다음의 헤더 파일을 포함해야 합니다.#include 아래는 unique_ptr 객체를 선언하는 방법을 보여줍니다.#include #include using namespace std;#define SIZE 100// 데이터를 할당하는 클래스class ResourceObj{..

2025. 3. 29.
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • ···
  • 11
  • »

전체 카테고리

  • 분류 전체보기
    • C++
    • 표준 라이브러리
    • 백준(BOJ)

블로그 인기글

태그

  • #const
  • #constexpr
  • #범위 기반 for
  • #이진 탐색
  • #std::string_view
  • #전처리기
  • #std::unique_ptr
  • #using
  • #namespace
  • #복사 생성자
  • #포인터
  • #Lamda
  • #동적 계획법
  • #헤더 가드
  • #전방 선언
  • #std::vector
  • #상수 표현식
  • #std::stack
  • #auto
  • #std::queue
  • #초기화
  • #inline
  • #decltype
  • #std::sort
  • #소멸자
  • #함수 객체
  • #Enum
  • #static_cast
  • #예외 처리
  • #깊이 우선 탐색
MORE
애드센스 광고 영역
Powered by Privatenote Copyright © 코딩 모닥불 All rights reserved. TistoryWhaleSkin3.4

티스토리툴바