일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 언리얼
- 언리얼 엔진5 #언리얼 클라이언트 프로그래밍
- 헤더 경로
- Console
- leetcode
- topdownmove
- 메테리얼
- UE_5
- 폭설 #미친 날씨
- C++
- CS
- Unreal
- c++ 베이직
- Harvard
- 언리얼엔진5 #언리얼 클라이언트 프로그래밍
- 오늘밤 세계에서 이 사랑이 사라진다 해도 #독후감 #오열
- 툰쉐이딩
- Toon Shading
- STL
- 브론즈
- Module
- 원카페#무인카페#카페추천#카페맛집
- build.cs
- 순환 리스트
- 코드리뷰
- Gas
- 네트워크 기초
- 백준
- A* Algorithm
- CS50
- Today
- Total
목록C++/면접 대비 (15)
WN_인생기록
1. const int*, int const* int* const 차이점 -> const 가 어디에 붙어있는지 물어보는 질문 -> 기본적으로 const 는 상수라는 의미를 가지고 있는데, const + 변수형 + 변수이름 인 경우에는 변수이름을 가진 데이터가 변할수 없는 상수 라는 의미를 가짐. -> const int* (변수명) 은 변수가 가지고 있는 데이터의 값이 상수임을 나타내는것. 그렇기 때문에 해당 포인터가 다른 변수를 가리켜도 컴파일에는 문제가 없다. -> int* const (변수명)은 포인터 자체가 상수임을 나타내는것. 그렇기 때문에 해당 포인터가 가리키고 있는 데이터의 값이 변경되어도 컴파일에는 문제가 없으나, 포인터가 가리키는 변수 자체는 변경할 수 없다. int num = 3; ..
객체를 정의하는 것이 바로 클래스 입니다. 흔히들 말하는 객체의 틀이라고 설명하는 것입니다. 객체 지향 프로그래밍에서는 클래스는 2가지로 크게 구분 됩니다. 구상 클래스와 추상 클래스입니다. 클래스는 스택, 힙 메모리에 생성이 되는데, 이것을 인스턴싱이라고 합니다. 객체라는 개념이 실체화 되는 순간이며, 이 인스턴싱이 되는 클래스가 구상 클래스 이고, 인스턴싱이 안되는 클래스는 추상 클래스 라고 합니다. 추상클래스는 virtual ~ =0; 이라는 문법으로 쓰이며 이는 인스턴싱 될 수 없는 클래스 입니다.
inline함수는 inline으로 지정된 함수를 컴파일러가 main 함수에서 실행하도록 하는 기능입니다. 함수는 호출할때 새로운 스택프레임을 생성하여 호출하게 됩니다. 그러나 inline을 붙인다면 함수 전체를 main함수의 본문으로써 인식하게 됩니다. 이로써 오버헤드를 줄이는 효과도 있지만, 남발하게 된다면 본문의 크기가 커지니 메모리 사용량이 증가할수도 있습니다.하지만 간단한 코드가 아니라면 코드 본문의 크기가 커지게 됨으로, inline이 제대로 작동하지 않을 가능성도 있습니다.
가상 소멸자는 파생클래스가 상속을 받았을때, 필요한 메서드 입니다. 파생클래스가 생성될때는, 상위 클래스의 생성자가 생성되고, 이후에 파생클래스의 생성자가 실행됩니다. 그러나 소멸할때도 상위 클래스의 소멸자가 먼제 실행되기때문에, 파생클래스의 소멸자가 호출되지 않아 메모리 누수가 발생합니다. 이를 막기 위해서는, 상위 클래스의 소멸자에 virtual를 붙여 생성하면, 상속받은 소멸자가 먼저 호출되어, 메모리 누수가 없이 소멸됩니다.
클래스에는 3가지 생성자가 있습니다. 기본 생성자, 매개변수 생성자, 복사 생성자가 있습니다. class의 기본 기능들이기 때문에, 명시적으로 구현하지 않으면 자동으로 생성됩니다. #include using namespace std; // 기본 생성자 class Class_name { public: Class_name() { cout
다형성은 보통 오버로드와 오버로딩으로 나뉘는데, 컴파일 시간에 정의되는 다형성과 런타임에 정의되는 다형성으로 구분할 수 있습니다. 컴파일 시간에 정의되는 다형성은 함수 오버로딩, 연산자 오버로딩이 있으며 함수 오버로딩과 연산자 오버로딩은 각각의 인수 또는 연산자의 수와 유형에 따라 컴파일 시간에 정의됩니다. 런타임에 정의되는 다형성은 함수 오버라이딩과 가상 함수가 있습니다. 함수 오버라이딩과 가상함수는 객체유형을 기반으로 함수 구현을 동적으로 선택하기 때문에 런타임에 정의됩니다. 기본 클래스와 파생 클래스의 관계가 있는 기능들은 런타임에 정의된다고 정리할 수 있습니다.
가상함수는 파생 클래스에서 가상 함수를 재정의해 자체적으로 함수 구현을 할 수 있도록 하는 기능입니다. 재정의하지 않아도 기본적인 기능은 보장되어 실체가 생길 수 있습니다. 순수가상함수는 virtual로 선언된 함수에 = 0; 값을 할당하는 가상함수입니다. 하나 이상의 순수 가상함수를 포함하는 클래스는 추상 클래스 라고 하며, 추상클래스의 객체는 인스턴스화 할 수 없습니다.(실체가 없습니다.) 기본 구현은 존재하지 않고, 파생 클래스에서만 재정의되어 구현되는데, 이는 인터페이스를 정의하여 파생클레스에 전달하기 위함입니다. 추상 클래스의 모든 순수가상함수를 재정의해야 실체가 생깁니다. 인터페이스* 파생클레스가 없으면 안될 중요한 요소. (구현하지 않으면 실체가 안생김)