본문 바로가기
취업/기술 면접

C++

by 윤꽁참감 2022. 10. 25.
반응형

1. 가상함수 (virtual Function)

파생 클래스에서 재정의 할 것으로 기대하는 멤버 함수를 뜻한다.

파생 클래스에서 virtual 키워드를 사용하지 않아도 자동으로 가상함수가 된다.

 

가상 소멸자

다형성을 이용하기 위해 부모 클래스의 포인터로 자식 클래스를 호출할 때, 가상 함수로 정의되어 있지 않은 자식 클래스의 오버라이딩 된 함수를 호출하면 부모 클래스의 멤버 함수가 호출된다.

이를 해결하기 위해 소멸자를 가상함수로 선언하면 자식 클래스에서 재정의 될 수 있음을 명시하여 포인터의 종류에 상관없이 호출하게 된다.

그렇다고해서 항상 가상함수로 선언하면 안된다.

virtual 키워드를 사용하면 가상함수 테이블 포인터가 생기고 가상함수 테이블에 등록이 된다.

남발하게되면 메모리에 불필요한 공간이 생기기 때문이다.

 

생성자와 소멸자 호출 순서

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

 

new, delete 연산자 오버로딩

new 연산자는 메모리 할당, 생성자 호출, 주소 값의 형변환 작업을 진행한다.

연산자 함수가 먼저 호출되고 해당 타입의 생성자가 호출된다.

delete 연산자로 객체 소멸을 호출하면 해당 타입의 소멸자가 호출되고 delete 연산자 함수에 주소값을 전달한다.

 

복사 생성자

복사 생성자는 Class c(other);의 형태로 호출된다.

모든 클래스는 복사 생성자가 제공(얕은 복사)되나 객체의 변수값을 그대로 복사해주어 생성자에 동적할당이 포함된 클래스라면 값 변경이나 해제 등에서 문제가 발생 할 수 있다.

다음과 같은 형태로 복사 생성자를 정의하여 복사 생성자에서도 동적할당이 일어날 수 있도록 한다.(깊은 복사)

class Test

{

    public:

               Test(const Text& t) { ... }

}

얕은 복사에서는 힙 메모리 공간을 참조하는 경우에 문제가 된다.

https://musket-ade.tistory.com/30

깊은 복사는 복사 생성자를 재정의해줌으로써 객체간의 같은 메모리 공간 참조를 막아준다.

 

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는 포인터나 참조형의 상수성을 제거하는데 사용한다.

char str = "string";

const char* ptr = str;

char* c = const_cast<char*>(ptr);

c[0] = "a";

 

dynamic_cast

dynamic_cast는 다운캐스팅에 사용 된다. (업캐스팅은 static_cast를 사용)

런타임 시간에 검사하기 때문에 비용이 높다.

성공하면 원하는 타입의 값을 반환하고 실패하면 null 포인터를 반환한다.

Parent* pParent = new Child();

Child* pChild = static_cast<Child*>(pParent);

https://blockdmask.tistory.com/241

 

업캐스팅 / 다운캐스팅

업캐스팅

자식 클래스의 객체가 부모 클래스 타입으로 형변환 되는 것

하위 클래스의 정보를 담을 수 있는 객체에 상위 클래스의 자료형을 부여해서 상위 클래스처럼 사용하는 것

다운캐스팅 : 업캐스팅된 것을 다시 원상태로 돌리는 것. 타입을 명시적으로 지정해줘야 한다.

https://computer-science-student.tistory.com/335

업/다운 캐스팅을 잘 활용하면 다형성을 활용할 수 있다.

https://velog.io/@smallcherry/Java-UpCastingAndDownCasting

'취업 > 기술 면접' 카테고리의 다른 글

절차지향과 객체지향  (0) 2022.10.25
알고리즘  (0) 2022.10.25
운영체제  (0) 2022.10.25
TCP와 UDP  (0) 2022.07.08
Unity 클라이언트 기술 면접 키워드  (0) 2022.07.07

댓글