13일차 (12/28)
단축키 변경법
git - 설정 - 환경 - 키보드 - 검색창에 바꿀 기능 검색 - 바로 가기 키 누르기에 새로운 단축키 입력 - 할당
부모의 함수를 사용하고 싶다면 FullName을 사용하는 것이 정석이지만 보통은 그냥 사용한다.
하지만 클래스 멤버 변수든 클래스의 멤버함수든 전부다 FullName이 있다.
부모 클래스와 자식 클래스 중에 먼저 생성되는 것은 부모 클래스이다. 자식 클래스를 생성하면 무조건 부모 클래스도 생성된다.
class FightUnit
{
public:
FightUnit(int Value)
{
printf_s("FightUnit 생성자");
}
int Att; //8
int Hp;
void SetTest(int _Test)
{
Test = _Test;
}
private:
int Test;
__int64 Test2;
// void Test();
};
class Player : public FightUnit
{
public:
Player()
: FightUnit(10)
{
Att = 20;
printf_s("Player 생성자");
}
int Level;
};
위 그림과 같이 메모리적으로 부모는 자식보다 앞쪽에 위치한다.
생성자는 무조건 호출되고 당연히 부모가 먼저 만들어진다. 그 이유는 부모가 먼저 만들어져야 자식의 함수나 생성자에서 부모의 함수나 변수를 사용할 수 있기 때문이다.
업캐스팅 다운캐스팅
객체 지향에서 상속이란 is a 와도 같다.
플레이어는 싸우는 존재이다.
그래서 자식 클래스 플레이어 is a 부모 클래스 싸우는 존재와 같이 사용할 수있다.
FightUnit* NewUnit = &NewMonster;
위의 코드를 업캐스팅이라 부르는데 사용할 수 있을때는 업캐스팅을 사용하는 것이 권장된다. 암시적 형변환인데도 불구하고 권장되는 형변환이다.
bool* Ptr = reinterpret_cast<bool*>(&A);
위의 코드는 과정은 비슷하지만 자제하는게 좋은 코드이다.
업캐스팅이란 자식 클래스의 객체는 언제든 부모 클래스의 참조형이 될 수 있다는 것이다.
다운캐스팅이란 부모 클래스의 참조형에서 자식 클래스의 참조형으로 변환하는 것이다.
이건 권장하지 않는다. 사용하지 않는 것이 좋다.
Player* CurPlayer = reinterpret_cast<Player*>(NewUnit);
다중 상속
class Player : public TalkUnit, public FightUnit, public MoveUnit
{
};
위와 같이 하면 다중 상속을 받을 수 있다.
함수 뒤에 const를 붙이는 것은 this를 const 변수* const this로 변환하겠다는 것이다.
int GetHp() const
{
}
단축키
- Ctrl + K + O => 헤더코드 코드 전환 키
- F8 => 에러난 코드로 이동
프로그래밍 시에 주의할 점
- 접근제한 지정자 밑에 생성자 -> 변수 -> 함수 순으로 놓는다.(코딩 스탠다드)
- 절대 부모 클래스의 헤더 및 cpp에서 자식 클래스의 자료형은 없어야한다.(코딩 스탠다)