본문 바로가기

전체 글

(201)
[C++] 상등성과 동등성 1. 상등성 (Identity)두 객체가 메모리 상에서 정확히 같은 위치에 있는지, 두 객체가 동일한 객체인지를 나타낸다.상등성 비교는 주로 포인터나 참조를 통해 이루어진다.operator ==에 기반을 둔다. 2. 동등성 (Equality)두 객체의 내용이나 상태가 동일한지를 나타낸다.두 객체가 서로 다른 메모리 위치에 있더라도 내용이 같으면 동등하다고 판단한다.operator 에 기반을 둔다.표준의 연관 컨테이너들은 동등성에 기반을 두고 있다. 참고자료https://github.com/Romanticism-GameDeveloper/GameDeveloper-Client-Interview/blob/main/C%2B%2B/%EC%83%81%EB%93%B1%EC%84%B1%EA%B3%BC%20%EB%8F%9..
[C++] 순수 가상 함수 (pure virtual function) 1. 순수 가상 함수 (pure virtual function)함수의 정의가 이뤄지지 않고 함수만 선언한 상태다. 이를 추상클래스(abstract class)라고 부른다.virtual void foo() = 0;객체로 만들지 못하고 상속할 때만 사용할 수 있다.추상클래스를 상속받은 자식 클래스는 무조건 해당 순수 가상 함수를 오버라이드시켜야 한다.#include class A {public: virtual void foo() = 0;};class B : public A {public: void foo() override { printf("오버라이드~\n"); }};int main(void) { // A a; B b; b.foo(); //output : 오버..
[C++] 가상 소멸자 (virtual distructor) 1. 가상 소멸자virtual로 선언된 소멸자다.상속 관계가 있다면 가상 소멸자를 선언하는 것이 좋다. 자식 클래스의 인스턴스가 소멸할 경우 자식 클래스의 소멸자만 불리게 되므로 부모 클래스에서 동적 할당한 자료가 해제되지 않아 메모리 누수의 위험이 있다. 하지만 부모 클래스에 virtual 키워드를 붙여면 자식 클래스의 소멸자는 자동으로 virtual이 된다. 추가적으로 소멸자가 불릴 때는 자식, 부모 클래스 순으로 불리게 된다. 참고 자료https://github.com/Romanticism-GameDeveloper/GameDeveloper-Client-Interview/blob/main/C%2B%2B/%EA%B0%80%EC%83%81%20%EC%86%8C%EB%A9%B8%EC%9E%90.mdhttp..
[C++] vector 1. vector 컨테이너자동으로 메모리가 할당되는 배열이다.연속적인 메모리 공간을 미리 할당한다.원소 삽입 시 메모리 공간이 부족하다면 새 메모리 공간을 할당한 뒤 그곳에 기존 원소들을 복사한 다음 새 원소를 삽입한다.size: 실제 원소들이 있는 공간. resize 함수로 변경할 수 있다.capability: 벡터가 차지하고 있는 공간. reserve 함수로 변경할 수 있다. 2. 값 삭제erase: 값 삭제remove: 위치 변경두 가지를 주로 같이 사용한다.remove를 사용하여 해당 조건에 부합하는 원소들을 벡터의 뒤에 넣은 후, 뒤로 밀린 원소들의 시작범위를 넘겨준다. vector v;//...v.erase(remove(범위 시작, 범위 끝, 지우고 싶은 원소), v.end());v.erase..
[C++] typedef vs using (별칭 선언) 1. typedefC와 C++ 언어의 예약어다. 다른 자료형의 별명을 만들기 위해 사용된다.typedef int Length; //int의 동의어로 Length를 만든다typedef int (*PFI)(char *, char *); //int를 반환하는 2개의 char*인수의 함수에 대한 포인터를 위한 동의어로 PFI를 만든다 2. using C++ 언어의 예약어다. 포인터가 관여할 경우 using이 더 이해하기 쉽다.템플릿화가 가능하다.typedef std::unique_ptr> UPtrMapSS;//typedef 이용using UPtrMapSS = std::unique_ptr>;//using 이용 참고자료https://github.com/Romanticism-GameDeveloper/GameDevel..
[C++] template 1. template함수와 클래스가 제네릭 형과 동작할 수 있게 도와준다. 함수나 클래스를 개별적으로 다시 작성하지 않고도 수많은 자료형에서 동작할 수 있게 한다.중복되는 자료형에 대해 코드를 중복시키지 않고 일반화를 할 수 있다.C++에서는 템플릿 특수화가 가능해서 vector처럼 특정 타입에 대해서 다른 식으로 동작하게끔 만들 수 있다. 2. 장점컴파일러가 컴파일 타임에 템플릿 인스턴스에 대한 코드를 만들어주기 때문에 런타임이 줄어든다.타입만 다른 중복 코드들을 모을 수 있다.컴파일 도중 다형성 부여가 가능해서 vtable이 없고, 따라서 더 빠르게 동작한다. 3. 단점컴파일 타임에 인스턴스를 생성해서 컴파일 타임이 늘어난다.쓸모없는 템플릿 변형을 막을 방법이 없다.다형성이 추가될 경우 파일이 커져서..
[C++] struct vs class 1. struct (구조체)하나 이상의 기본 타입을 가지고 새로운 자료형을 정의하는 사용자 정의 타입이다.다양한 타입의 변수 집합을 하나의 타입으로 나타낸 것이다.기본 접근자는 public이다.struct Cat{ string name; string color; int age; int cat_num;}; 2. class비슷한 타입의 변수와 관련 프로세스를 수행하는 메소드를 정의한 틀이다.기본 접근자는 private이다. 3. struct vs class기본 접근자가 서로 다르다.초기화 방식에서도 차이가 있다.struct SomeStruct{ int var; int varPrivate;};class SomeClass{ int var; int varPrivate;..
[C++] static 1. static 멤버 변수클래스의 static 멤버 변수는 모든 클래스의 인스턴스들이 공유하는 멤버다.프로그램이 종료되기 전까지 한 번만 초기화되면서 계속해서 메모리에 올라가 있게 된다.반드시 cpp 파일에서 초기화해야 하지만, static const 변수의 경우 클래스에서 초기화가 가능하다. 값 변경이 불가능하고, 컴파일 타임 초기화가 가능하기 때문이다.접근 지정자가 private이라 하더라도 전역범위 초기화가 가능하다. 2. static 멤버 함수클래스의 static 함수는 모든 클래스의 인스턴스들이 공유하는 함수다.객체와는 관계없이 호출될 수 있고, 이 함수 내에서는 일반 멤버 변수(this가 붙은 멤버)에 대한 연산을 할 수 없다.static 멤버 변수, 함수에 대한 연산을 수행할 수 있다. 참..