본문 바로가기

c++ virtual3

C++ 20 [추상클래스, 순수가상함수] ▣ 순수 가상 함수 : 함수에 코드(원형)는 없고 선언만 하는 가상함수 ▣ 추상 클래스 : 순수 가상 함수가 포함되어 있는 클래스 ▣ 순수 가상 함수가 선언되었기 때문에 자식 클래스에서 오버라이딩을 해야 한다, 그렇지 않으면 추상 클래스의 인스턴스(객체)를 생성할 수 없다. ▣ 추상 클래스의 목적 : 순수 가상 함수를 통해서 자식 클래스가 구현할 함수의 원형을 보여주는 인터페이스 역할 ▣ 추상 클래스로 함수에 선언부를 잡아놓고 자식클래스에서 그 목적에 맞게 다시 구현(정의)해서 사용하기 때문에 선언부와 구현부를 나누어서 사용 가능 2023. 4. 20.
C++ 18 [상속, 다중상속, 가상상속] ▣ 상속 : 부모클래스(기본클래스), 자식 클래스(파생클래스)에 관계를 의미 ▣ 클래스 간에 상속을 하는 이유 : 클래스 재활용 및 생산성, 관리에 용이하기 때문 ▣ 상속 방법 : class 자식클래스명 : public 부모클래스명 { }; ▣ 부모클래스에 public, private, protected 모두 사용 가능 ▣ 상속 횟수는 제한이 없고 상속받은 자식클래스는 부모의 모든 멤버를 접근 가능 ▣ protected 접근지정자는 상속받은 클래스는 접근이 가능 ▣ 자식클래스가 부모클래스를 상속할 때에도 생성자, 소멸자 모두 실행 ▣ 자식클래스를 객체로 사용할 때 부모클래스 생성자 호출 -> 자식클래스 생성자 호출 -> 자식클래스 소멸자 호출 -> 부모클래스 소멸자 호출, 이런 순으로 실행 ▣ 이러한 생.. 2023. 4. 19.
C++ [가상함수] ▣ 기본클래스, 파생클래스를 선언하고 각각 멤버함수를 선언합니다. 멤버함수의 이름은 동일하게 선언합니다. 그리고 메인함수에서 GameManager 객체의 포인터, Player 객체의 포인터를 각각 정의하고 위에 코드처럼 GameMaanger클래스의 주소로 접근하여 멤버함수를 호출하는 코드, Player클래스의 주소를 pGameManager 함수에 대입하여 멤버함수를 호출하는 코드를 작성합니다. ▣ 디버그를 해보면 둘 다 GameManager 클래스의 멤버함수가 호출되는 걸 확인할 수 있습니다. ▣ 그 이유는 정적바인딩으로 컴파일할 때 호출될 함수의 주소가 이미 결정해 버렸기 때문에 pGameManager = pPlayer; 이렇게 코드를 작성하더라도 부모의 함수가 호출됩니다. ▣ 이럴 때 가상함수(Vir.. 2023. 2. 22.