#include <iostream>
class Actor
{
public:
virtual const char* GetName() { return "Actor"; }
//virtual 은 쓰나 안쓰나 동작에는 문제가 없으나 코드 해석을 위해 명시해주면 좋다
};
class Player :public Actor
{
private:
const char* name;
public:
Player(const char* name)
{
this->name = name;
}
const char* GetName() { return name; }
const char* GetName() override { return name; } //오버라이딩에 명시 안해줘도 됨
//오류 찾기에 좋음 override 안해주면 오타나도 못 찾음
//컴파일러가 보기엔 오버라이딩 하는지 새로운 함수를 생성하는지 모르니까~
};
int main ()
{
Actor* actor = new Actor();
std::cout << actor->GetName() << std::endl;
Player* player = new Player("Batman");
std::cout << player->GetName() << std::endl;
//다형성!!! virtual 키워드 override 써주면 좋다 분명하게 하기 위해서!
//상위 클래스로 형변환이 이루어짐
//상위 클래스로 형변환하는 과정을 업캐스팅이라고 한다
//반대는 다운캐스팅
Actor* actor2 = new Player("New Player");
std::cout << actor2->GetName() << std::endl;
delete actor;
delete player;
system("pause");
}
0 comments:
댓글 쓰기