분류 전체보기
-
Effective C++...11일지 2022. 6. 10. 07:34
객체의 모든 부분을 빠짐없이 복사하자 객체를 복사하는 함수 캡슐화한 객체 지향 시스템에 객체를 복사하는 함수는 단 두 개만 존재하며 이를 객체 복사 함수라고 부른다. 복사 생성자 클래스 인스턴스의 레퍼런스를 인자로 받는 생성자 복사 대입 연산자 클래스 인스턴스의 레퍼런스를 인자로 받는 대입 연산자 문제가 발생하는 경우 문제가 되는 경우도 크게 두 가지가 있다. 객체 복사 함수를 따로 구현한 뒤 멤버 변수를 추가했는데 객체 복사 함수에는 추가하지 않은 경우 상속받은 경우 상위 클래스의 멤버 변수를 복사해주지 않은 경우 상위 클래스의 멤버 변수 복사 문제가 발생하는 경우에서 상위 클래스의 멤버 변수 복사는 상위 클래스의 객체 복사 함수를 호출해 주는 것으로 해결할 수 있다. class PriorityCust..
-
[Unreal 4] C++을 이용한 오브젝트 생성 정리게임 엔진/Unreal 2022. 6. 9. 21:58
언리얼 C++를 이용한 오브젝트 생성 생성자에서 오브젝트 생성 CreateDefaultSubobject를 사용하면 된다. USphereComponent* SphereComponent = CreateDefaultSubobject(TEXT("Root")); ※ 생성자 외부에서 이 함수를 사용하면 컴파일 에러가 발생한다. 생성자 외부에서 오브젝트 생성 NewObject로 생성하면 된다. 컴포넌트인 경우 RegisterComponent를 호출해 등록해줘야 한다. USphereComponent* SphereComponent = NewObject(this, TEXT("Root")); SphereComponent->RegisterComponent(); ※ 컴포넌트에 설정은 RegisterComponent 전에 해야 ..
-
Effective C++...10일지 2022. 6. 9. 08:03
Operator=에서는 자기 대입에 대한 처리가 빠지지 않도록 하자 자기 대입이란? 어떤 객체가 자기 자신에 대해 대입 연산자를 적용하는 것을 말한다. class Widget { ... };Widget w; w = w; // 같은 변수에 대입하는 경우 a[i] = a[j]; // 만약 i와 j가 같은 경우 *px = *py; // 자기 대입이 될 가능성이 높음 자기 대입이 문제가 되는 경우 포인터를 사용하고 있고 대입할 때 기존 포인터 값을 삭제하고 대입하는 값을 복사해 사용하는 코드가 있을 때, 자기 대입이 발생한 경우 제거된 값을 복사하려고 시도하게 될 수 있다. // Widget에 Bitmap* pb가 있다. Widget& Widget::operator=(const Widget& rhs) { del..
-
Effective C++...9일지 2022. 6. 8. 07:26
대입 연산자는 *this의 참조자를 반환하게 하자 일종의 관례 대입 연산은 우측 연관 연산이라는 특성을 가지며 이는 대입 시 우측에 있는 인자의 값을 대입하는 방식으로 진행된다. 이때, 참조되는 값을 넘길 때 참조자를 반환하는 게 일종의 관례이다. int x, y, z; x = y = z = 15; // 이를 풀어쓰면 x = (y = (z = 15)); 이렇게 되는데, z에 15를 대입하고 y에 값이 대입된 z를 대입하고 x에는 또 y를 대입하는 식이다. class Widget { // 클래스 구현 시 모든 대입 연산자(=, +=, -= 등)는 *this의 참조자를 반환하는 게 좋다. public: Widget& operator=(const Widget& rhs) { return *this; //이렇게 ..
-
Effective C++...8일지 2022. 6. 7. 07:52
객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 파생 클래스의 초기화 파생 클래스의 기본 클래스 초기화 시 파생 클래스는 기본 클래스로 결정된다. 즉, 기본 클래스 초기화 시에는 typeid 같은 것을 사용하더라도 기본 클래스로 나타나게 되며 가상 함수를 호출한다면 기본 클래스의 가상 함수가 호출될 것이다. class Transaction { public: Transaction(); virtual void logTransaction() const = 0; // 로그를 찍는 가상 함수가 있는 경우 }; Transaction::Transaction() { logTransaction(); // 이 경우 Transaction의 logTransaction을 호출하게 된다. } class Sell..
-
Effective C++...7일지 2022. 6. 6. 18:01
예외가 소멸자를 떠나지 못하도록 붙들어 놓자 소멸자에서 예외를 회피하는 방법 먼저, 소멸자에서 예외가 발생하는 경우 디버깅이 거의 불가능하므로 예외가 발생하지 않는 게 가장 좋다. 하지만 예외가 발생하는 경우엔 두 가지 방법으로 처리를 할 수 있다. 소멸자에서 예외 발생 시 로그를 출력하고 프로그램을 종료한다. 소멸자에서 예외 발생 시 로그를 출력하고 예외를 소멸시킨다. ※ 사용자에게 선택권이 없으므로 둘 다 좋은 방법은 아니다. 사용자에게 선택권을 부여하는 방법 소멸자에서 호출하던 Close 함수가 있었다면 이 함수를 사용자가 호출할 수 있도록 한다면 예외 발생 시 사용자 스스로 디버깅을 진행할 수 있게 된다. class DBConn { public: ... void close() { db.close(..
-
JUNGOL/Intermediate_Coder/그래프탐색-BFS/1078 : 저글링 방사능 오염코딩 테스트/JUNGOL 2022. 6. 6. 14:36
Intermediate_Coder/그래프탐색-BFS/저글링 방사능 오염 문제 승훈이는 심심한 시간에 스타크래프트(Starcraft) 게임을 하며 놀고 있었다. 스타크래프트 유닛중 하나인 저글링을 한 곳에 몰아세운 뒤, 방사능 오염 공격으로 없애보려고 했다. 그런데 좀 더 재미있게 게임을 하기 위해서 게임을 개조하여 방사능 오염 공격을 가하면 방사능은 1초마다 이웃한 저글링에 오염된다. 그리고 방사능에 오염된 저글링은 3초 후에 죽게 된다. 예를 들어 아래 왼쪽그림과 같이 모여 있는 저글링 중에 빨간 동그라미 표시를 한 저글링에게 방사능 오염공격을 가하면, 총 9초 후에 저글링들이 죽게 된다. 아래 오른쪽에 있는 그림의 숫자들은 각 저글링들이 죽는 시간이다. 저글링을 모아놓은 지도의 크기와 지도상에 저글링..
-
JUNGOL...187일지 2022. 6. 6. 14:12
Intermediate_Coder/그래프탐색-BFS/저글링 방사능 오염 문제 승훈이는 심심한 시간에 스타크래프트(Starcraft) 게임을 하며 놀고 있었다. 스타크래프트 유닛중 하나인 저글링을 한 곳에 몰아세운 뒤, 방사능 오염 공격으로 없애보려고 했다. 그런데 좀 더 재미있게 게임을 하기 위해서 게임을 개조하여 방사능 오염 공격을 가하면 방사능은 1초마다 이웃한 저글링에 오염된다. 그리고 방사능에 오염된 저글링은 3초 후에 죽게 된다. 예를 들어 아래 왼쪽그림과 같이 모여 있는 저글링 중에 빨간 동그라미 표시를 한 저글링에게 방사능 오염공격을 가하면, 총 9초 후에 저글링들이 죽게 된다. 아래 오른쪽에 있는 그림의 숫자들은 각 저글링들이 죽는 시간이다. 저글링을 모아놓은 지도의 크기와 지도상에 저글링..