개발자 면접 질문 정리 - C++

    C++

    가상함수 virtual Fuction

    • 가상함수는 파생 클래스에서 재정의 할 것으로 기대하는 멤버 함수를 뜻한다.
    • 파생클래스에서 virtual 키워드를 사용하지 않아도 자동으로 가상함수가 된다.

    가상 소멸자

    • 소멸자는 가상함수로 선언 하여 기본 클래스와 파생 클래스 모든 소멸자가 호출되도록 한다.

    생성자와 소멸자 호출 순서

    • 부모 클래스가 있는 자식 클래스는 부모생성자 - 자식생성자 - 자식소멸자 - 부모소멸자 순으로 호출된다.

    new, delete 연산자 오버로딩

    • new 연산자는 메모리 할당, 생성자 호출, 주소 값의 형변환 작업을 진행한다.
    • 연산자 함수가 먼저 호출되고 해당 타입의 생성자가 호출된다.
    • void * operator new (size_t size) { void * adr = new char[size]; return adr; }
    • delete 연산자로 객체 소멸을 호출하면 해당 타입의 소멸자가 호출되고 delete 연산자 함수에 주소값을 전달한다.
    void operator delete (void * adr)
    {
      delete []adr;
    }

    복사 생성자

    복사생성자는 Class c(other); 의 형태로 호출이 된다. 모든 클래스는 기본적으로 복사 생성자가 제공(얕은 복사)되나 객체의 변수값을 그대로 복사해주어 생성자에 동적할당이 포함된 클래스라면 값 변경이나 해제 등에서 문제가 발생할 수 있다.
    다음과 같은 형태로 복사 생성자를 정의하여 복사 생성자에서도 동적할당이 일어 날수 있도록 하자(깊은 복사)

    class Test
    {
    public:
        Test(const Text& t)   { ...중략... }
    }

    malloc / new

    • malloc은 사이즈를 매개변수로 받고, 리턴 타입이 void* 형이다. new는 할당할 타입을 지정하면 해당 타입의 포인터로 넘어 온다.
    • malloc은 메모리를 동적으로 할당하고 초기값을 지정해 줄수 없지만, new는 할당과 동시에 생성자를 호출한다.

    Cast 연산자

    명시적 형변환

    • C 스타일의 명시적 형변환은 변환하고자 하는 항목 앞에 (변환타입)을 붙여서 사용한다.
    int num = 1;
    float fNum = (float)num; 

    static_cast

    • static_cast는 컴파일 타임에 형변환에 대한 타입오류를 검사한다.
    int num = 1;
    float fNum = static_cast<float>(num);

    const_cast

    • const_cast는 포인터(pointer)나 참조형(reference)의 상수성(const)를 제거하는데 사용한다.
    char str = "string";
    const char* ptr = str;
    char* c = const_cast<char*>(ptr);
    c[0] = "a";

    reinterpret_cast

    • reinterpret_cast는 임의의 포인터 끼리의 변환을 허용한다. 대상을 변환할 타입으로 비트단위로 바꾸어 준다.
    • 다른 형태의 포인터로 변경이 가능하기에 형변환의 결과는 컴파일러마다 다르고, 결과적으로 예상하지 못한 잘못된 데이터로 변경될 우려가 있다.

    dynamic_cast

    • dynamic_cast는 다운캐스팅에 사용이 된다. (업캐스팅은 static_cast를 사용)
    • 런타임 시간에 검사하기때문에 비용이 높다.
    • 성공하면 원하는 타입의 값을 반환하고 실패하면 null 포인터를 반환한다.
        Parent* pParent = new Child(); 
        Child* pChild = static_cast<Child*>(pParent);
    반응형

    댓글

    Designed by JB FACTORY