Daek_You(281)
-
[C++] 복사 생성자(Copy constructor), 얕은 복사(Shallow Copy), 깊은 복사(Deep Copy)
*을 보며 공부하여 정리한 글입니다. 1. 복사 생성자(Copy constructor) 객체를 복사하여 생성할 때 호출되는 생성자를 말한다. 사용자가 따로 넣지 않을 경우, 컴파일러가 자동적으로 디폴트 복사 생성자를 삽입해준다. class Monster { char* name; int hp; int damage; public: Monster(const Monster& copyMonster); // 복사 생성자 ... }; 함수 내부에서, 받은 인자의 값을 변경할 일이 없다면 다음과 같이 정의하는 것이 더 안전하다. Moster(const Monster& copyMonster); 즉, 다른 객체의 상수 레퍼런스를 매개변수로 받는다. const 이기 때문에 복사 생성자 내부에서 매개변수로 가져온 참조 데이터..
2022.02.09 -
[C++] 생성자(Default Constructor) 사용 시 주의사항
*을 보며 공부하여 정리한 글입니다. 예시를 들기 위해 다음과 같이 몬스터(Monster) 클래스가 있다고 가정한다. class Monster { private: string name; int hp; int attackDamage; public: Monster(); Monster(string name, int hp, int attackDamage) { ... } ... }; 객체 생성 방법 (동적 할당 X) 암시적 방법(Implicit) Monster monster("달팽이", 100, 5); Monster defMonster; // 디폴트 생성자 사용하여 객체 생성 명시적 방법(Explicit) Monster monster = Monster("달팽이", 100, 5); Monster defMonster..
2022.02.08 -
[C++] C++ 컴파일러에서 함수를 오버로딩(Overloading)하는 과정
*을 보며 공부하여 정리한 글입니다. 1. 함수 오버로딩(Overloading)이란? 동일한 이름의 함수를 매개변수 타입, 매개변수의 개수에 따라 구분하여 여러 개 생성 가능하게 하는 것을 말합니다. 비슷한 기능인데 함수 이름이 각각 달라, 개별적으로 기억할 수고가 없어져서 편리합니다. 함수의 리턴 타입으로도 구분이 가능하나, 리턴 타입만 다르고 매개변수까지 똑같은 함수를 만드는 것은 불가능 #include // 함수 오버로딩 int Add(int x, double y) { return x + y; } int Add(int x, int y) { return x + y; } double Add(double x, double y) { return x + y; } // int Add(double x, doub..
2022.02.08 -
[C++] 참조자(Reference)
*을 보며 공부하여 정리한 글입니다. 1. 참조자(Reference)란? C 언어에서는 함수에 인자 전달 시, 원본을 바꾸는 방법으로는 Call by address밖에 없었다. 하지만, C++에서는 Call by address 외에도 다른 변수나 상수를 가리킬 수 있는 참조자(Reference) 방식또한 지원한다. 포인터와 달리 &와 * 연산자 사용이 줄기 때문에 코드를 훨씬 간결하게 나타낼 수 있다. scanf()와 달리 cin이 &를 사용하여 주소값을 줄 필요가 없는 것도 cin 내부적으로 참조를 받기 때문이다. int x = 5; int& referenceX = x; // 참조자 선언 referenceX = 10; std::cout
2022.02.08 -
[C++] 이름공간(namespace) 사용 시 주의사항
이름 공간 전체 사용 선언은 권장하지 않는다. C++ 프로그래밍을 할 때, 범위지정 연산자를 붙이기 귀찮아서 다음과 같이 이름 공간 전체를 사용하겠다고 선언한 적이 있다. using namespace std; // std 이름 공간 전체 사용 선언 하지만 이런 방법은 권장되지 않는다고 한다. std 이름 공간 내부에 이름이 겹치는 함수를 만들게 된다면 오류가 발생하기 때문이다. C++ 표준 라이브러리는 매우 거대해서 수많은 함수들이 존재한다. 그러니, 자칫 잘못해서 위와 같은 오류가 발생한다면 해결하는데 매우 힘이 들 것이라고 한다. 또한, C++ 버전이 바뀔 때마다 기존 이름 공간에서 추가되는 함수들이 있을 수 있으므로 기존에 잘 작동하던 코드가 이름 충돌로 인해 동작하지 않을 수도 있다고 한다. 따라..
2022.02.07 -
[압량(Amnyang)] #8. 2D 주인공 이동 중 점프(Move Jump), 착지 후 경직 딜레이 구현하기
점프에 대한 요구사항 제자리 점프일 경우, 좌우 이동 불가 이동 중 점프할 경우, 포물선 궤도를 그리며 점프 점프 중엔 반대 방향으로 돌아보는 모션 불가 점프 후 착지 시 약간의 경직이 있음 저번 글에서 두 가지는 구현을 했던 걸로 기억한다. (글을 적는 시점에 생각이 안 났다,,,) 이제 제자리 점프 후에 착지 시, 약간의 경직을 줘서 바로 달리지 못하도록 구현해야 한다. 이동 중 점프는 제자리 점프와는 모션이 다르므로 각각 구분해서 조작이 되도록 적용해줘야 한다. 1. 이동하면서 점프하는 애니메이션 적용하기 이동 중 점프 모션은 딱히 만들 게 없다. 그냥 적당한 간격의 프레임을 두고 팔, 다리, 목 등을 살짝 움직이는 효과만 주면 됐다. 믿기지 않겠지만, 정말로 이게 다다. 이제 스크립트에서, 제자리..
2022.02.07