클래스의 다형성




 #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:

댓글 쓰기